Submission #1255937

#TimeUsernameProblemLanguageResultExecution timeMemory
1255937kamradSecret (JOI14_secret)C++20
0 / 100
337 ms4712 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; #define pb(x) push_back(x) #define sz(x) x.size() const int maxN = 1e3 + 10; int n; int a[maxN]; struct SegTree { struct Node { vector <int> lsuf; vector <int> rpre; } t[maxN<<2]; void initialize(int id, int L, int R) { if(L+1 == R) { t[id].lsuf.pb(a[L]); return; } int mid = (L+R)>>1; initialize(2*id+0, L, mid); initialize(2*id+1, mid, R); t[id].lsuf.pb(a[mid-1]); for(int i = mid-2; i >= L; i--) t[id].lsuf.pb(Secret(a[i], t[id].lsuf[sz(t[id].lsuf)-1])); t[id].rpre.pb(a[mid]); for(int i = mid+1; i < R; i++) t[id].rpre.pb(Secret(a[i], t[id].rpre[sz(t[id].rpre)-1])); } int get(int id, int L, int R, int l, int r) { if(L+1 == R) return t[id].lsuf[0]; int mid = (L+R)>>1; if(l >= mid) return get(2*id+1, mid, R, l, r); if(r <= mid) return get(2*id+0, L, mid, l, r); return Secret(t[id].lsuf[mid-1-l], t[id].rpre[r-mid-1]); } } s; void Init(int N, int A[]) { n = N; for(int i = 1; i <= n; i++) a[i] = A[i-1]; s.initialize(1, 1, n+1); } int Query(int L, int R) { L++; R++; return s.get(1, 1, n+1, L, R+1); }
#Verdict Execution timeMemoryGrader output
Fetching results...