Submission #406449

#TimeUsernameProblemLanguageResultExecution timeMemory
406449bonopo비밀 (JOI14_secret)C++14
0 / 100
570 ms4476 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; #define pb push_back #define el "\n" #define f first #define s second typedef long long ll; const ll MM=1e3+5, MOD=1e9+7; int N, a[MM], pfx[10][MM], sfx[10][MM]; int Secret(int X, int Y); void build(int l, int r, int lvl) { int m=(l+r)/2; for(int i=m; i>=l; --i) { if(i==m) sfx[lvl][i]=a[i]; else sfx[lvl][i]=Secret(a[i], sfx[lvl][i+1]); } for(int i=m+1; i<=r; ++i) { if(i==m+1) pfx[lvl][i]=a[i]; else pfx[lvl][i]=Secret(a[i], pfx[lvl][i-1]); } if(l<r) build(l, m, lvl+1), build(m+1, r, lvl+1); } int qry(int l, int r, int ql, int qr, int lvl) { int m=(l+r)/2; if(ql<=m+1&&qr>=m) { int p=(qr==m+0?0:pfx[lvl][qr]); int s=(ql==m+1?0:sfx[lvl][ql]); if(qr==m+0) return s; if(ql==m+1) return p; return Secret(p, s); } if(ql<=m&&qr<=m) return qry(l, m, ql, qr, lvl+1); else return qry(m+1, r, ql, qr, lvl+1); } void Init(int n, int A[]) { N=n; for(int i=0; i<N; ++i) a[i]=A[i]; build(0, N-1, 0); } int Query(int L, int R) { return qry(0, N-1, L, R, 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...