Submission #1207586

#TimeUsernameProblemLanguageResultExecution timeMemory
1207586ricardsjansonsSecret (JOI14_secret)C++20
0 / 100
331 ms4392 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; const int N=1<<10; vector<int>segt(N*2,-1); map<pair<int,int>,int>hintmem; int hint(int x,int y){ if(x>y){ swap(x,y); } if(!hintmem.count({x,y})){ hintmem[{x,y}]=Secret(x,y); } return hintmem[{x,y}]; } void upd(int i,int x){ i+=N; segt[i]=x; for(i/=2;i;i/=2){ if(segt[i*2]<0||segt[i*2+1]<0){ break; } segt[i]=Secret(segt[i*2],segt[i*2+1]); } } void Init(int n, int a[]) { for(int i=0;i<n;i++){ upd(i,a[i]); } } int f(int i){ if(segt[i]>=0){ return segt[i]; } segt[i]=hint(f(i*2),f(i*2+1)); return segt[i]; } int Query(int l, int r) { l+=N; r+=N; vector<int>v; while(l<=r){ if(l%2==1){ v.push_back(segt[l++]); } if(r%2==0){ v.push_back(segt[r--]); } l/=2; r/=2; } int res=v.back(); v.pop_back(); for(int x:v){ res=Secret(res,x); } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...