Submission #728930

#TimeUsernameProblemLanguageResultExecution timeMemory
728930CookieSecret (JOI14_secret)C++14
100 / 100
461 ms4448 KiB
#include "secret.h" #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define forr(i, a, b) for(int i = a; i < b; i++) #define dorr(i, a, b) for(int i = a; i >= b; i--) #define ld long double #define vt vector #include<fstream> #define fi first #define se second #define pll pair<ll, ll> #define pii pair<int, int> #include <stdio.h> #include <stdlib.h> const int mxn = 1000; ll tab[11][mxn + 1], mask[mxn + 1]; vt<ll>v; void build(int l, int r, int lev){ if(l == r)return; int mid = (l + r) >> 1; tab[lev][mid] = v[mid]; for(int i = mid - 1; i >= l; i--){ tab[lev][i] = Secret(v[i], tab[lev][i + 1]); } tab[lev][mid + 1] = v[mid + 1]; for(int i = mid + 2; i <= r; i++){ tab[lev][i] = Secret(tab[lev][i - 1], v[i]); } for(int i = mid + 1; i <= r; i++)mask[i] ^= (1 << lev); build(l, mid, lev + 1); build(mid + 1, r, lev + 1); } void Init(int n, int a[]){ for(int i = 0; i < n; i++)v.pb(a[i]); build(0, n - 1, 0); } ll get(int le, int ri, int lvl, int l, int r){ if(le == ri)return(v[le]); int mid = (le + ri) >> 1; if(r <= mid){ return(get(le, mid, lvl + 1, l, r)); }else if(l > mid){ return(get(mid + 1, ri, lvl + 1, l, r)); }else{ return(Secret(tab[lvl][l], tab[lvl][r])); } } int Query(int l, int r){ if(l == r)return(v[l]); return(get(0, v.size() - 1, 0, l, r)); }
#Verdict Execution timeMemoryGrader output
Fetching results...