Submission #1248924

#TimeUsernameProblemLanguageResultExecution timeMemory
1248924julia_08Secret (JOI14_secret)C++20
100 / 100
340 ms4464 KiB
#include "secret.h" #include <bits//stdc++.h> using namespace std; const int MAXN = 1e3 + 10; int a[MAXN], mask[MAXN]; int val[10][MAXN]; void compute(int l, int r, int d, int cur_mask){ if(l == r){ mask[l] = cur_mask; return; } int m = (l + r) / 2; val[d][m] = a[m]; if(m + 1 <= r) val[d][m + 1] = a[m + 1]; for(int i=(m + 2); i<=r; i++) val[d][i] = Secret(val[d][i - 1], a[i]); for(int i=(m - 1); i>=l; i--) val[d][i] = Secret(a[i], val[d][i + 1]); compute(l, m, d + 1, cur_mask); compute(m + 1, r, d + 1, cur_mask + (1 << d)); } void Init(int n, int a_[]){ for(int i=0; i<n; i++) a[i] = a_[i]; compute(0, n - 1, 0, 0); } int Query(int l, int r){ if(l == r) return a[l]; int d = __builtin_ctz(mask[l] ^ mask[r]); return Secret(val[d][l], val[d][r]); }
#Verdict Execution timeMemoryGrader output
Fetching results...