Submission #466474

#TimeUsernameProblemLanguageResultExecution timeMemory
466474koioi.org-dennisstarSecret (JOI14_secret)C++17
100 / 100
539 ms8416 KiB
#include "secret.h"
#include <bits/stdc++.h>

using namespace std;

int n;
vector<vector<int>> ar;

void init(int s, int e) {
	if (s==e) return ;
	int m=(s+e)/2;
	for (int i=m; i>=s; i--) if (ar[i][m]==-1) ar[i][m]=Secret(ar[i][i], ar[i+1][m]);
	for (int i=m+1; i<=e; i++) if (ar[m+1][i]==-1) ar[m+1][i]=Secret(ar[m+1][i-1], ar[i][i]);
	init(s, m); init(m+1, e);
}

void Init(int n, int a[]) {
	::n=n;
	ar.resize(n, vector<int>(n, -1));
	for (int i=0; i<n; i++) ar[i][i]=a[i];
	init(0, n-1);
}

int Query(int l, int r) {
	int s=0, e=n-1;
	while (1) {
		int m=(s+e)/2;
		if (l<=m&&m<=r) {
			if (m==r) return ar[l][m];
			return Secret(ar[l][m], ar[m+1][r]);
		}
		if (m<l) s=m+1;
		else e=m;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...