#include "secret.h"
int n;
int v[10000], st[20][10000];
void build(int n2, int A[]) {
n = n2;
for (int i = 0; i < n; i++) v[i] = A[i];
while (n&(n-1)) n++;
for (int j = 0; (1<<j) < n; j++) {
int len = 1<<j;
for (int c = len; c < n; c += 2*len) {
st[j][c] = v[c], st[j][c-1] = v[c-1];
for (int i = c+1; i < c+len; i++) st[j][i] = Secret(st[j][i-1], v[i]);
for (int i = c-2; i >= c-len; i--) st[j][i] = Secret(v[i], st[j][i+1]);
}
}
}
void Init(int N, int A[]){
build(N, A);
}
int Query(int L, int R){
if (L == R) return v[L];
int j = __builtin_clz(1) - __builtin_clz(L^R);
return Secret(st[j][L], st[j][R]);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |