Submission #578684

#TimeUsernameProblemLanguageResultExecution timeMemory
578684ddy888Secret (JOI14_secret)C++17
0 / 100
449 ms4324 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define fi first #define si second typedef pair<int,int> pi; typedef tuple<int,int,int> ti; void debug_out() {cerr<<endl;} template <typename Head, typename... Tail> void debug_out(Head _H, Tail... _T) {cerr<<" "<<to_string(_H);debug_out(_T...);} #define debug(...) cerr<<"["<<#__VA_ARGS__<<"]:",debug_out(__VA_ARGS__) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int n, arr[1010]; int t[10][1010]; int mask[1010]; void build(int l, int r, int level) { if (l == r) return; int m = (l + r) >> 1; t[level][m] = arr[m]; for (int i = m - 1; i >= l; --i) t[level][i] = Secret(arr[i], t[level][i + 1]); t[level][m + 1] = arr[m + 1]; for (int i = m + 2; i <= r; ++i) t[level][i] = Secret(arr[i], t[level][i - 1]); for (int i = m + 1; i <= r; ++i) mask[i] ^= (1 << level); build(l, m, level + 1); build(m + 1, r, level + 1); } void Init(int N, int A[]) { n = N; for (int i = 0; i < n; ++i) arr[i] = A[i]; build(0, n - 1, 0); } int Query(int L, int R) { if (L == R) return arr[L]; int bits = __builtin_ctz(mask[L] ^ mask[R]); return Secret(t[bits][L], t[bits][R]); }
#Verdict Execution timeMemoryGrader output
Fetching results...