Submission #639175

#TimeUsernameProblemLanguageResultExecution timeMemory
639175phoenixSecret (JOI14_secret)C++17
100 / 100
449 ms4416 KiB
#include<bits/stdc++.h> #include "secret.h" using namespace std; const int N = 1000; const int logN = 11; int lef[ N ][ logN ], rig[ N ][ logN ]; void build(int l, int r, int lev, int a[]) { if(l == r) { lef[ l ][ lev ] = a[ l ]; rig[ r ][ lev ] = a[ r ]; return; } int m = (l + r) / 2; for(int i = m + 1;i <= r;i++) { if(i == m + 1) rig[ i ][ lev ] = a[ i ]; else rig[ i ][ lev ] = Secret(rig[i - 1][ lev ], a[ i ]); } for(int i = m;i >= l;i--) { if(i == m) lef[ i ][ lev ] = a[ i ]; else lef[ i ][ lev ] = Secret(a[ i ], lef[i + 1][ lev ]); } build(l, m, lev + 1, a); build(m + 1, r, lev + 1, a); } int query(int ql, int qr, int l, int r, int lev) { if(l == r) return lef[ l ][ lev ]; int m = (l + r) / 2; if(ql <= m && m < qr) { return Secret(lef[ ql ][ lev ], rig[ qr ][ lev ]); } if(qr <= m) return query(ql, qr, l, m, lev + 1); return query(ql, qr, m + 1, r, lev + 1); } int n; void Init(int nn, int a[]) { n = nn; build(0, n - 1, 0, a); } int Query(int l, int r) { return query(l, r, 0, n - 1, 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...