Submission #755255

#TimeUsernameProblemLanguageResultExecution timeMemory
755255penguin133Secret (JOI14_secret)C++17
6 / 100
444 ms4452 KiB
#include <bits/stdc++.h> using namespace std; #include "secret.h" //#define int long long #define pi pair<int, int> #define pii pair<int, pi> #define fi first #define se second #ifdef _WIN32 #define getchar_unlocked _getchar_nolock #endif mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); int a[1030], n, sp[12][1030], cnt; void Init(int N, int A[]) { n = N; for(int i=0;i<n;i++)a[i] = A[i]; while((1 << cnt) < n)cnt++; n = (1 << cnt); for(int i = 0; i < cnt; i++){ int blk = (1 << i); int sz = (n + blk - 1) / blk; for(int j = 1; j <= blk; j++){ int lb = (j - 1) * sz, ub = min(n - 1, j * sz - 1); if(lb >= n)break; int mid = (lb + ub) >> 1; for(int k = mid; k >= lb; k--){ if(k == mid)sp[i][mid] = a[mid]; else sp[i][k] = Secret(a[k], sp[i][k + 1]); } for(int k = mid + 1; k <= ub; k++){ if(k == mid + 1)sp[i][k] = a[k]; else sp[i][k] = Secret(sp[i][k-1], a[k]); } } } } int Query(int L, int R) { if(L == R)return a[L]; int brr = L ^ R; brr = cnt - (31 - __builtin_clz(brr)) - 1; return Secret(sp[brr][L], sp[brr][R]); }
#Verdict Execution timeMemoryGrader output
Fetching results...