Submission #1273565

#TimeUsernameProblemLanguageResultExecution timeMemory
1273565_filya_Secret (JOI14_secret)C++20
0 / 100
334 ms4460 KiB
#include "secret.h" #include<bits/stdc++.h> using namespace std; vector<int> a, mask; vector<vector<int>> dat; void divide(int l, int r, int level) { if (r - l + 1 <= 2) return; int m = (r + l) / 2; dat[level][m] = a[m]; for (int i = m - 1; i >= l; i--) dat[level][i] = Secret(a[i], dat[level][i + 1]); dat[level][m + 1] = a[m + 1]; for (int i = m + 2; i <= r; i++) dat[level][i] = Secret(dat[level][i - 1], a[i]); for (int i = m + 1; i <= r; i++) mask[i] ^= (1 << level); divide(l, m, level + 1); divide(m + 1, r, level + 1); } void Init(int N, int A[]) { int n = N; a.assign(n, 0); mask.assign(n, 0); for (int i = 0; i < n; i++) a[i] = A[i]; dat.assign(8, vector<int>(n, 0)); divide(0, n - 1, 0); } int Query(int L, int R) { if (L == R) return a[L]; else if (R - L + 1 == 2) return Secret(a[L], a[R]); else { int lvl = __builtin_ctz(mask[L] ^ mask[R]); return Secret(dat[lvl][L], dat[lvl][R]); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...