Submission #877533

#TimeUsernameProblemLanguageResultExecution timeMemory
877533serkanrashidSecret (JOI14_secret)C++14
100 / 100
388 ms4604 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1024; int n,a[maxn]; int pref[maxn][16],suff[maxn][16]; int query(int l, int r, int lvl, int L, int R) { if(l>r) return 0; int mid = (l+r)/2; if(L<=mid&&mid<=R) { int chis = pref[L][lvl]; if(R!=mid) chis = Secret(chis,suff[R][lvl]); return chis; } if(R<mid) return query(l,mid-1,lvl+1,L,R); return query(mid+1,r,lvl+1,L,R); } int Query(int L, int R) { int ans = query(0,n-1,1,L,R); return ans; } void divide(int l, int r, int lvl) { if(l>r) return; int mid = (l+r)/2; pref[mid][lvl] = a[mid]; for(int i=mid-1;i>=l;i--) pref[i][lvl] = Secret(a[i],pref[i+1][lvl]); if(mid!=r) suff[mid+1][lvl] = a[mid+1]; for(int i=mid+2;i<=r;i++) suff[i][lvl] = Secret(suff[i-1][lvl],a[i]); divide(l,mid-1,lvl+1); divide(mid+1,r,lvl+1); } void Init(int N, int A[]) { n = N; for(int i=0;i<n;i++) a[i] = A[i]; divide(0,n-1,1); }
#Verdict Execution timeMemoryGrader output
Fetching results...