Submission #487164

#TimeUsernameProblemLanguageResultExecution timeMemory
487164VictorSecret (JOI14_secret)C++17
0 / 100
459 ms4532 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = (a); i < (b); ++i) #define per(i, a, b) for (int i = (b - 1); i >= (a); --i) #define trav(a, x) for (auto &a : x) #define all(x) x.begin(), x.end() #define sz(x) x.size() #define pb push_back #define debug(x) cout << #x << " = " << x << endl #define umap unordered_map #define uset unordered_set typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<vi> vvi; typedef long long ll; typedef pair<ll, ll> pll; typedef vector<ll> vll; typedef vector<pll> vpll; const int INF = 1'000'000'007; int precomp[11][1001], nums[1001]; int n; void dnc(int lo, int hi, int level) { if (lo >= hi) return; int mid = (lo + hi) / 2; precomp[level][mid] = nums[mid]; per(i, lo, mid) precomp[level][i] = Secret(nums[i], precomp[level][i + 1]); precomp[level][mid + 1] = nums[mid + 1]; rep(i, mid + 2, hi + 1) precomp[level][i] = Secret(nums[i], precomp[level][i - 1]); dnc(lo, mid - 1, level - 1); dnc(mid + 1, hi, level - 1); } void Init(int N, int A[]) { rep(i, 0, N) nums[i] = A[i]; dnc(0, N - 1, 10); n = N; } int Query(int L, int R) { if (L == R) return nums[L]; int lo = 0, hi = n - 1, level = 10; while (1) { int mid = (lo + hi) / 2; if (R == mid) return precomp[level][L]; if (L <= mid && mid < R) return Secret(precomp[level][L], precomp[level][R]); if (R < mid) hi = mid - 1; else lo = mid + 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...