This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define ll long long
const int L=21, A=30, MAX=1e6+10;
struct st{
st *jump[L+2], *g[A];
int war, gle;
};
int licznik;
st *ope[MAX];
st *root=new st;
void Init(){
for(int i=0; i<A-1; i++)
root->g[i]=nullptr;
for(int i=0; i<L; i++)
root->jump[i]=root;
root->gle=-1;
ope[0]=root;
}
void dodaj(st *v, char c){
if(v->g[c-'a']==nullptr){
st *nowy=new st;
for(int i=0; i<A-1; i++)
nowy->g[i]=nullptr;
nowy->war=c-'a';
nowy->gle=v->gle+1;
nowy->jump[0]=v;
for(int i=1; i<=L; i++)
nowy->jump[i]=nowy->jump[i-1]->jump[i-1];
v->g[c-'a']=nowy;
}
}
void TypeLetter(char c){
licznik++;
st *akt=ope[licznik-1];
dodaj(akt, c);
akt=akt->g[c-'a'];
ope[licznik]=akt;
}
void UndoCommands(int x){
licznik++;
ope[licznik]=ope[licznik-x-1];
}
char GetLetter(int pos){
st *akt=ope[licznik];
//cout<<akt<<"\n";
int x=akt->gle-pos, l=0;
while(x){
if(x%2) akt=akt->jump[l];
x/=2, l++;
}
return char(akt->war+'a');
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |