#include "secret.h"
#include <bits/stdc++.h>
#define pb push_back
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define con continue
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ld;
//const ll N = 3e5 + 5;
const ll MOD = 1e9 + 7;
const ll maxn = 6e5 + 5;
const ll inf = 1e9+1;
const ll INF = 1e18;
const ll K = 31;
/*vector <ll> z_function(string s){
// ll n = s.size();
// ll l = 0,r = 0;
// vector <ll> z(n);
// for(ll i = 1;i < n;i++){
// if(i <= r){
// z[i] = (r - i + 1,z[i - l]);
// }
// while(i + z[i] < n && s[z[i]] == s[z[i] + i]){
// z[i]++;
// }
// if(i + z[i] - 1 > r){
// r = i + z[i]-1;
// l = i;
// }
// }
}*/
/*vector <ll> prefix_function(string s){
ll n = s.size();
vector <ll> pi(n,0);
for(ll i = 1;i < n;i++){
ll j = pi[i - 1];
while(j > 0 && s[i] != s[j]){
j = pi[j - 1];
}
if(s[i] == s[j])++j;
pi[i] = j;
}
return pi;
}*/
int b[1005],N;
int suf[1005][1005];
int pre[1005][1005];
void Init(int n,int a[]){
for(int i = 1;i <= n;i++){
b[i] = a[i - 1];
}
N= n;
queue <pair<int,int> > q;
q.push({1,n});
while(q.size()){
pair<int,int> z = q.front();
int l = z.F;
int r = z.S;
int mid = (l + r) / 2;
suf[mid][mid] = b[mid];
for(int i = mid - 1;i >= l;i--){
suf[mid][i] = Secret(suf[mid][i+1],b[i]);
}
pre[mid+1][mid+1] = b[mid+1];
for(int i = mid + 2;i <= r;i++){
pre[mid+1][i] = Secret(pre[mid+1][i-1],b[i]);
}
if(l < r){
if(l != mid)q.push({l,mid});
if(r != mid)q.push({r,mid});
}
}
}
int Query(int l,int r){
l++;
r++;
if(l == r){
return b[r];
}
int L = 1,R = N;
while(1 == 1){
int mid = (L + R) / 2;
if(r <= mid){
R = mid;
con;
}
if(l > mid){
L = mid + 1;
con;
}
break;
}
int mid = (L + R) / 2;
int ans = Secret(suf[mid][l],pre[mid+1][r]);
return ans;
}
//main(){
// ios_base::sync_with_stdio(0);
// cin.tie(0);
// ll abd = 1;
//// cin >> abd;
// for(ll i = 1;i <= abd;i++){
// solve();
// }
//}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |