제출 #1256695

#제출 시각아이디문제언어결과실행 시간메모리
1256695nguyenhuythach비밀 (JOI14_secret)C++20
0 / 100
344 ms4432 KiB
#include "secret.h" #include<bits/stdc++.h> #include<algorithm> #include<random> #include<chrono> #include<cstdlib> #include<ctime> #include<numeric> #include<vector> #include<stack> #include<map> #include<set> #include<queue> #include<iomanip> #define ll long long #define fi first #define se second #define pii pair<int,int> #define sz(a) ((int)a.size()) #define FOR(i,j,k) for(int i=j;i<=k;i++) #define REP(i,k,j) for(int i=k;i>=j;i--) #define FORD(i,a) for(auto i:a) #define rngdcl mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()) #define random(l,r) ((l)+(rng()%(r-l+1))) using namespace std; const int nmax=1069; int n; int a[nmax],pfx[15][nmax],suf[15][nmax]; void dnc(int l,int r,int lv) { if(l==r) { suf[lv][l]=a[l]; return; } int mid=(l+r)/2; //precase suf[lv][mid]=a[mid]; pfx[lv][mid+1]=a[mid+1]; //build REP(i,mid-1,l) suf[lv][i]=Secret(a[i],suf[lv][i+1]); FOR(i,mid+2,r) pfx[lv][i]=Secret(pfx[lv][i-1],a[i]); //recursion dnc(l,mid,lv+1); dnc(mid+1,r,lv+1); } void Init(int N, int A[]) { n=N; FOR(i,1,n) a[i]=A[i-1]; dnc(1,n,1); } pii get(int id, int l, int r, int u, int v) { int mid = (l + r) / 2; if (u <= mid && mid <= v) { return {id, mid}; } if (u > mid) { return get(id + 1, mid + 1, r, u, v); } return get(id + 1, l, mid, u, v); } int Query(int L,int R) { int l=L+1,r=R+1; auto save=get(1,1,n,l,r); if(l==r) return a[l]; else if(r==save.se) return suf[save.fi][l]; else if(l==save.se) return pfx[save.fi][r]; else return Secret(suf[save.fi][l],pfx[save.fi][r]); }
#Verdict Execution timeMemoryGrader output
Fetching results...