Submission #1085796

#TimeUsernameProblemLanguageResultExecution timeMemory
1085796f0rizenSecret (JOI14_secret)C++17
100 / 100
336 ms4532 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; using ll = long long; const int inf = 1e9 + 7; const ll infll = 1e18; const int lg = 10; int *a; vector<int> st[lg]; vector<int> mask; void Init(int N, int A[]) { a = A; for (int i = 0; i < lg; ++i) { st[i].resize(N); } mask.resize(N); auto build = [&](auto build, int l, int r, int k) -> void { if (l == r) { return; } int mid = (l + r) / 2; st[k][mid] = A[mid]; for (int i = mid - 1; i >= l; --i) { st[k][i] = Secret(A[i], st[k][i + 1]); } st[k][mid + 1] = A[mid + 1]; for (int i = mid + 2; i <= r; ++i) { st[k][i] = Secret(st[k][i - 1], A[i]); } for (int i = mid + 1; i <= r; ++i) { mask[i] ^= (1 << k); } build(build, l, mid, k + 1); build(build, mid + 1, r, k + 1); }; build(build, 0, N - 1, 0); } int Query(int L, int R) { if (L == R) { return a[L]; } int k = __builtin_ctz(mask[L] ^ mask[R]); return Secret(st[k][L], st[k][R]); }
#Verdict Execution timeMemoryGrader output
Fetching results...