Submission #1313412

#TimeUsernameProblemLanguageResultExecution timeMemory
1313412muhammad-ahmadSecret (JOI14_secret)C++20
0 / 100
339 ms8280 KiB
#include <bits/stdc++.h>
#include "secret.h"
using namespace std;

const int N = 1e3 + 5;
int n, pref[N][N], a[N];

void precalculate(int l, int r){
	int mid = (l + r) / 2;
	pref[mid][mid] = a[mid];
	pref[mid + 1][mid + 1] = a[mid];
	for (int i = mid - 1; i >= l; i--){
		pref[mid][i] = Secret(a[i], pref[mid][i + 1]);
	}
	for (int i = mid + 2; i <= r; i++){
		pref[mid + 1][i] = Secret(pref[mid + 1][i - 1], a[i]);
	}
	if (l < mid) precalculate(l, mid);
	if (r > mid + 1) precalculate(mid + 1, r);
}

void Init(int nn, int A[]){
	n = nn;
	for (int i = 0; i < n; i++) a[i] = A[i];
	precalculate(0, n - 1);
}

int Query(int L, int R){
	int l = 0, r = n - 1;
	while (l != r){
		int mid = (l + r) / 2;
		if (L <= mid && mid < R) return Secret(pref[mid][L], pref[mid + 1][R]);
		else if (mid == R) return pref[mid][L];
		else if (mid < L) l = mid + 1;
		else r = mid;
	}
	return pref[l][r];
}
#Verdict Execution timeMemoryGrader output
Fetching results...