Submission #287651

#TimeUsernameProblemLanguageResultExecution timeMemory
287651luciocfpopa (BOI18_popa)C++14
61 / 100
751 ms508 KiB
#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)
{
	int ini = 0, fim = i-1;
	a[i] = i;

	while (ini <= fim)
	{
		int mid = (ini+fim)>>1;

		if (query(mid, i, i, i)) a[i] = mid, fim = mid-1;
		else ini = mid+1;
	}


	ini = i+1, fim = n-1;
	b[i] = i;

	while (ini <= fim)
	{
		int mid = (ini+fim)>>1;

		if (query(i, mid, i, i)) b[i] = mid, ini = mid+1;
		else fim = mid-1;
	}
}

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 (stderr)

popa.cpp: In function 'int f(int, int)':
popa.cpp:34:1: warning: control reaches end of non-void function [-Wreturn-type]
   34 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...