Submission #960942

#TimeUsernameProblemLanguageResultExecution timeMemory
960942pccSecret (JOI14_secret)C++17
6 / 100
382 ms4864 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; const int mxn = 1010; vector<int> pref[mxn*4],suf[mxn*4]; int arr[mxn]; int N; #define mid ((l+r)>>1) #define ls now*2+1 #define rs now*2+2 void build(int now,int l,int r){ if(l == r){ pref[now].push_back(arr[l]); suf[now].push_back(arr[l]); return; } build(ls,l,mid); build(rs,mid+1,r); pref[now] = pref[ls]; for(int i = mid+1;i<=r;i++)pref[now].push_back(Secret(pref[now].back(),arr[i])); suf[now] = suf[rs]; reverse(suf[now].begin(),suf[now].end()); for(int i = mid;i>=l;i--)suf[now].push_back(Secret(arr[i],suf[now].back())); reverse(suf[now].begin(),suf[now].end()); //cout<<l<<' '<<r<<":";cout<<endl;for(auto &i:pref[now])cout<<i<<',';cout<<endl;for(auto &i:suf[now])cout<<i<<',';cout<<endl; return; } int getval(int now,int l,int r,int s,int e){ if(l == r)return arr[l]; if(mid>=s&&mid<e){ return Secret(suf[ls].end()[s-mid-1],pref[rs][e-mid-1]); } if(mid>=e)return getval(ls,l,mid,s,e); else return getval(rs,mid+1,r,s,e); } #undef ls #undef rs #undef mid void Init(int NN, int A[]) { N = NN; for(int i = 0;i<N;i++)arr[i] = A[i]; build(0,0,N-1); return; } int Query(int L, int R) { return getval(0,0,N-1,L,R); }
#Verdict Execution timeMemoryGrader output
Fetching results...