답안 #287665

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
287665 2020-08-31T22:06:12 Z luciocf popa (BOI18_popa) C++14
0 / 100
179 ms 384 KB
#include <bits/stdc++.h>
#include "popa.h"

using namespace std;

const int maxn = 1e3+10;

int n;
int L[maxn], R[maxn];

int a[maxn], b[maxn];

int root;
bool mark[maxn];

int f(int l, int r)
{
	if (l > r) return -1;

	for (int i = 0; i < n; i++)
	{
		if (!mark[i] && a[i] <= l && b[i] >= r)
		{
			if (l == 0 && r == n-1) root = i;

			mark[i] = 1;

			L[i] = f(l, i-1);
			R[i] = f(i+1, r);

			return i;
		}
	}
}

void get(int i)
{
	a[i] = i, b[i] = i;

	stack<int> stk;

	for (int i = 0; i < n; i++)
	{
		while (stk.size() && !query(stk.top(), i, stk.top(), stk.top()))
			stk.pop();

		if (stk.size()) a[i] = stk.top()+1;
		else a[i] = 0;

		stk.push(i);
	}

	while (stk.size()) stk.pop();

	for (int i = n-1; i >= 0; i--)
	{
		while (stk.size() && !query(i, stk.top(), stk.top(), stk.top()))
			stk.pop();

		if (stk.size()) b[i] = stk.top()-1;
		else b[i] = n-1;

		stk.push(i);
	}
}

int solve(int N, int *Left, int *Right)
{
	memset(mark, 0, sizeof mark);
	n = N;

	for (int i = 0; i < n; i++)
		get(i);

	f(0, n-1);

	for (int i = 0; i < n; i++)
		Left[i] = L[i], Right[i] = R[i];

	return root;
}

Compilation message

popa.cpp: In function 'int f(int, int)':
popa.cpp:34:1: warning: control reaches end of non-void function [-Wreturn-type]
   34 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 97 ms 256 KB too many queries
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 179 ms 360 KB too many queries
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 384 KB too many queries
2 Halted 0 ms 0 KB -