Submission #1239373

#TimeUsernameProblemLanguageResultExecution timeMemory
1239373caacrugonCrayfish scrivener (IOI12_scrivener)C++20
100 / 100
308 ms185228 KiB
#include <bits/stdc++.h> using namespace std; #define mkp make_pair vector<char> segtree(1000010*20,' '); vector<int> lef(1000010*20),righ(1000010*20),root(1000010),siz(1000010); int i=1,v=0; void update(int exr, int newr, int l, int r, int x, char j){ lef[newr]=lef[exr]; righ[newr]=righ[exr]; segtree[newr]=segtree[exr]; if(l==r){ segtree[newr]=j; return; } int m=l+((r-l)/2); if(x<=m){ i++; lef[newr]=i; update(lef[exr],lef[newr],l,m,x,j); }else{ i++; righ[newr]=i; update(righ[exr],righ[newr],m+1,r,x,j); } } char query(int root, int l, int r, int x){ if(l==r)return segtree[root]; int m=l+((r-l)/2); if(x<=m)return query(lef[root],l,m,x); else return query(righ[root],m+1,r,x); } void Init() { v=0; root[v]=v; siz[v]=v; v++; } void TypeLetter(char L) { i++; root[v]=i; siz[v]=siz[v-1]+1; update(root[v-1],root[v],0,1000000,siz[v-1],L); v++; } void UndoCommands(int U) { int target=v-1-U; root[v]=root[target]; siz[v]=siz[target]; v++; } char GetLetter(int P) { return query(root[v-1],0,1000000,P); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...