Submission #518937

#TimeUsernameProblemLanguageResultExecution timeMemory
518937valerikkSecret (JOI14_secret)C++17
100 / 100
449 ms8304 KiB
#include "secret.h"
#include <assert.h>
#include <string.h>
#include <vector>

static const int N = 1005;

static int n;
static int a[N];
static int b[N][N];

void go(int l, int r) {
	if (l == r) {
		b[l][r] = a[l];
		return;
	}

	int m = (l + r) / 2;

	go(l, m);
	for (int i = m - 1; i >= l; i--) {
		b[i][m] = Secret(a[i], b[i + 1][m]);
	}

	go(m + 1, r);
	for (int i = m + 2; i <= r; i++) {
		b[m + 1][i] = Secret(b[m + 1][i - 1], a[i]);
	}
}

void Init(int grader_N, int grader_A[]) {
	n = grader_N;
	for (int i = 0; i < n; i++) {
		a[i] = grader_A[i];
	}

	memset(b, 255, sizeof(b));

	go(0, n - 1);
}

int Query(int grader_L, int grader_R) {
	int l = grader_L, r = grader_R;

	if (~b[l][r]) {
		return b[l][r];
	}

	for (int m = l; m < r; m++) {
		if (~b[l][m] && ~b[m + 1][r]) {
			return Secret(b[l][m], b[m + 1][r]);
		}
	}

	assert(false);

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...