#include "secret.h"
#include <bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
#define sz(x) x.size()
const int maxN = 1e3 + 10;
int n;
int a[maxN];
struct SegTree {
struct Node {
vector <int> lsuf;
vector <int> rpre;
} t[maxN<<2];
void initialize(int id, int L, int R) {
if(L+1 == R) {
t[id].lsuf.pb(a[L]);
return;
}
int mid = (L+R)>>1;
initialize(2*id+0, L, mid);
initialize(2*id+1, mid, R);
t[id].lsuf.pb(a[mid-1]);
for(int i = mid-2; i >= L; i--)
t[id].lsuf.pb(Secret(a[i], t[id].lsuf[sz(t[id].lsuf)-1]));
t[id].rpre.pb(a[mid]);
for(int i = mid+1; i < R; i++)
t[id].rpre.pb(Secret(a[i], t[id].rpre[sz(t[id].rpre)-1]));
}
int get(int id, int L, int R, int l, int r) {
if(L+1 == R)
return t[id].lsuf[0];
int mid = (L+R)>>1;
if(l >= mid)
return get(2*id+1, mid, R, l, r);
if(r < mid)
return get(2*id+0, L, mid, l, r);
return Secret(t[id].lsuf[mid-1-l], t[id].rpre[r-mid]);
}
} s;
void Init(int N, int A[]) {
n = N;
for(int i = 1; i <= n; i++)
a[i] = A[i-1];
s.initialize(1, 1, n+1);
}
int Query(int L, int R) {
L++;
R++;
return s.get(1, 1, n+1, L, R);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |