#include <bits/stdc++.h>
#include "secret.h"
#define NMAX 1000
#define LOG 9
#define ll long long int
#define BASE 32
#define MOD 998244353
using namespace std;
ifstream fin("cod.in");
ofstream fout("cod.out");
int pref[NMAX+1][NMAX+1];
int n;
int a[NMAX+1];
void divide(int st,int dr)
{
int m = (st+dr)/2;
pref[m][m] = a[m];
for(int i=m-1;i>=st;i--)
{
pref[i][m] = Secret(a[i],pref[i+1][m]);
}
for(int i=m+1;i<=dr;i++)
{
pref[m][i] = Secret(a[i],pref[m][i-1]);
}
if(st<m)
{
divide(st,m);
}
if(m+1<dr)
{
divide(m+1,dr);
}
}
void Init(int N,int A[])
{
n=N;
for(int i=1;i<=n;i++)
{
a[i] = A[i-1];
}
divide(1,N);
}
int Query(int L,int R)
{
int st=1;
int dr=n;
L++;
R++;
while(st<dr)
{
int m = (st+dr)/2;
if(L<=m && m+1<=R)
{
return Secret(pref[L][m],pref[m+1][R]);
}
if(R<=m)
{
dr=m;
}
else
{
st=m+1;
}
}
return pref[st][st];
}
//int main()
//{
//
//
//}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |