#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int mxN = (int)1e6+2;
template<int SZ>
struct Trie{
int trie[26][SZ], jmp[20][SZ];
int cur, IND, sz[SZ];
char letter[SZ];
vector<int> v;
void init(){ cur=0; IND=0; v.clear(); memset(jmp,0,sizeof(jmp)); }
void add(char x){
int c = x-'a';
if(!trie[c][cur]) trie[c][cur]=++IND;
int p = cur; cur = trie[c][cur];
sz[cur] = sz[p]+1; v.pb(cur);
jmp[0][cur] = p; letter[cur] = x;
for(int j = 1; j < 20; j++)
jmp[j][cur] = jmp[j-1][jmp[j-1][cur]];
}
void undo(int num){ v.pb(end(v)[-num-1]); cur = v.back(); }
char get(int x){
int xd = sz[cur]-x, lol = cur;
for(int i = 0; i < 20; i++)
if(xd>>i&1) lol=jmp[i][lol];
return letter[lol];
}
};
Trie<mxN> trie;
void Init(){ trie.init(); };
void TypeLetter(char L){ trie.add(L); };
void UndoCommands(int U){ trie.undo(U); };
char GetLetter(int P){ return trie.get(P+1); };
# | 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... |