#include <bits/stdc++.h>
#include "secret.h"
using namespace std;
const int mxN = 1005;
int a[mxN], dp[20][mxN], n;
void process(int depth, int l, int r){
if(l == r){
dp[depth][l] = a[l];
return;
}
int mid = (l + r) / 2;
dp[depth][mid] = a[mid];
for(int i = mid - 1; i >= l; --i) dp[depth][i] = Secret(a[i], dp[depth][i + 1]);
dp[depth][mid + 1] = a[mid + 1];
for(int i = mid + 2; i <= r; ++i) dp[depth][i] = Secret(dp[depth][i - 1], a[i]);
process(depth + 1, l, mid), process(depth + 1, mid + 1, r);
}
int get(int depth, int start, int end, int l, int r){
if(start == end) return dp[depth][l];
int mid = (start + end) / 2;
if(r <= mid){
return get(depth + 1, start, mid, l, r);
}else if(l >= (mid + 1)){
return get(depth + 1, mid + 1, end, l, r);
}else{
return Secret(dp[depth][l], dp[depth][r]);
}
}
void Init(int N, int A[]) {
n = N;
for(int i = 0; i < N; ++i) a[i] = A[i];
process(0, 0, n - 1);
}
int Query(int L, int R) {
return get(0, 0, n - 1, L, R);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |