Submission #1153566

#TimeUsernameProblemLanguageResultExecution timeMemory
1153566PekibanSecret (JOI14_secret)C++20
100 / 100
339 ms4476 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; const int N = 1001, LOG = 10; int P[LOG][N], S[LOG][N], a[N], n; void build(int l, int r, int i = 0) { if (l == r) return; int m = (l + r)/2; S[i][m] = a[m], P[i][m+1] = a[m+1]; for (int j = m-1; j >= l; --j) S[i][j] = Secret(a[j], S[i][j+1]); for (int j = m+2; j <= r; ++j) P[i][j] = Secret(P[i][j-1], a[j]); build(l, m, i+1); build(m+1, r, i+1); } void Init(int NN, int A[]) { n = NN; for (int i = 1; i <= n; ++i) a[i] = A[i-1]; build(1, n); } int Query(int L, int R) { L++, R++; if (L == R) return a[L]; int l = 1, r = n, i = 0; while (1) { int m = (l + r)/2; if (L <= m && m+1 <= R) break; else if (R <= m) r = m; else l = m+1; ++i; } return Secret(S[i][L], P[i][R]); }
#Verdict Execution timeMemoryGrader output
Fetching results...