#include<bits/stdc++.h>
#include"secret.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int) (x).size()
#define endl '\n'
ll s[30][100005], a[100005], n=0;
void solve(int l, int r, int lvl)
{
if(l>r) return;
if(l==r) {s[lvl][l]=a[l];return;}
int mid=(l+r)/2;
s[lvl][mid]=a[mid], s[lvl][mid+1]=a[mid+1];
for(int i=mid+2;i <= r;i++) s[lvl][i]=Secret(s[lvl][i-1], a[i]);
for(int i=mid-1;i >= l;i--) s[lvl][i]=Secret(a[i], s[lvl][i+1]);
solve(l, mid, lvl+1);
solve(mid+1, r, lvl+1);
}
void Init(int N, int A[])
{
n=N;
for(int i = 0;i < N;i++) a[i]=A[i];
solve(0, N-1, 0);
}
int Query(int L, int R)
{
int mid=n/2;
int l=0, r=n-1, lvl=0;
while(mid>R&&mid<L)
{
int md=(l+r)/2;
if(md>R) r=md;
else l=md+1;
mid=l;
lvl++;
}
return Secret(s[lvl][L], s[lvl][R]);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |