Submission #1255948

#TimeUsernameProblemLanguageResultExecution timeMemory
1255948kamradSecret (JOI14_secret)C++20
0 / 100
341 ms16220 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 { int lsuf[maxN]; int rpre[maxN]; } t[maxN<<2]; void initialize(int id, int L, int R) { if(L+1 == R) { t[id].lsuf[L] = a[L]; return; } int mid = (L+R)>>1; initialize(2*id+0, L, mid); initialize(2*id+1, mid, R); t[id].lsuf[L] = a[L]; for(int i = L+1; i < mid; i++) t[id].lsuf[i] = Secret(t[id].lsuf[i-1], a[i]); t[id].rpre[mid] = a[mid]; for(int i = mid+1; i < R; i++) t[id].rpre[i] = Secret(t[id].rpre[i-1], a[i]); } int get(int id, int L, int R, int l, int r) { if(L+1 == R) return a[L]; 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[l], t[id].rpre[r]); } } 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) { return s.get(1, 1, n+1, L+1, R+1); }
#Verdict Execution timeMemoryGrader output
Fetching results...