Submission #411873

#TimeUsernameProblemLanguageResultExecution timeMemory
411873Killer2501Secret (JOI14_secret)C++14
0 / 100
553 ms4788 KiB
#include<bits/stdc++.h> #include "secret.h" #define pll pair<ll, ll> #define fi first #define se second #define pb push_back #define task "hopscotch" #define pii pair<ll, pll> using namespace std; using ll = long long; const int N = 1e4+55; const ll mod = 998244353; const ll base = 350; const ll cs = 331; ll m, n, t, k, a[N], ans, tong, b[N], c[N], d[N], P[N][22]; vector<ll> adj[N], kq; ll pw(ll k, ll n) { ll total = 1; for(; n; n >>= 1) { if(n & 1)total = total * k % mod; k = k * k % mod; } return total; } void build(int l, int r, int lv) { if(l == r)return; ll mid = (l + r) / 2; P[mid][lv] = b[mid]; P[mid+1][lv] = b[mid+1]; for(int i = mid-1; i >= l; i --)P[i][lv] = Secret(b[i], P[i+1][lv]); a[mid+1] ^= (1<<lv); for(int i = mid+2; i <= r; i ++) { P[i][lv] = Secret(b[i], P[i-1][lv]); a[i] ^= (1<<lv); } build(l, mid, lv+1); build(mid+1, r, lv+1); } void Init(int n, int A[]) { m = n; for(int i = 0; i < m; i ++)b[i] = A[i]; build(0, m-1, 0); } int Query(int l, int r) { if(l == r)return b[l]; int id = __builtin_ctz(a[l]^a[r]); return Secret(P[l][id], P[r][id]); }
#Verdict Execution timeMemoryGrader output
Fetching results...