Submission #728916

#TimeUsernameProblemLanguageResultExecution timeMemory
728916CookieSecret (JOI14_secret)C++14
0 / 100
488 ms4504 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; int tab[10][mxn + 1], mask[mxn + 1]; vt<int>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(tab[lev][i + 1], v[i]); } 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); } int Query(int l, int r){ if(l == r)return(v[l]); int level = __builtin_ctz(mask[l] ^ mask[r]); return(Secret(tab[level][l], tab[level][r])); }
#Verdict Execution timeMemoryGrader output
Fetching results...