Submission #260128

#TimeUsernameProblemLanguageResultExecution timeMemory
260128uacoder123Crayfish scrivener (IOI12_scrivener)C++14
100 / 100
616 ms170720 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second #define FOR(i,a,b) for (auto i = (a); i <= (b); ++i) #define NFOR(i,a,b) for(auto i = (a); i >= (b); --i) #define all(x) (x).begin(), (x).end() #define sz(x) int(x.size()) #define mp(i,a) make_pair(i,a) #define pb(a) push_back(a) #define bit(x,b) (x&(1LL<<b)) typedef int lli; typedef pair <lli,lli> ii; typedef pair <lli,ii> iii; typedef vector <lli> vi; int t[1000000][26],par[1000000][32],co=1,lev[1000000]; vi v; char c[1000000]; void Init() { v.pb(0); for(int i=0;i<32;++i) par[0][i]=0; lev[0]=0; } void TypeLetter(char L) { if(t[v.back()][L-'a']==0) { t[v.back()][L-'a']=co; par[co][0]=v.back(); c[co]=L; lev[co]=lev[v.back()]+1; for(int i=1;i<32;++i) par[co][i]=par[par[co][i-1]][i-1]; v.pb(co); co++; } else v.pb(t[v.back()][L-'a']); } void UndoCommands(int U) { v.pb(v[v.size()-U-1]); } char GetLetter(int P) { P++; int p=lev[v.back()]-P,cur=v.back(),b=0; while((1LL<<b)<=p) { if(bit(p,b)) cur=par[cur][b]; b++; } return(c[cur]); }
#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...