#include<bits/stdc++.h>
#define eb emplace_back
#define S second
#define dbg(v) cerr << #v << " = " << v << "\n"
#define F first
#define fall(i,a,n) for(int i=a;i<=n;i++)
#define rfall(i,a,n) for(int i=a;i>=n;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define lsb(x) (x & -x)
#define sz(x) (int)x.size()
const int MAXN=1e6+10;
const int MAXL=21;
const int MOD=998244353;
using namespace std;
typedef pair<int,int> pii;
typedef tuple<int,int,int> trio;
int cont=0,s=-1,op[MAXN]={-1},last=0;
int sparse[MAXN][MAXL];
set<pair<int,char>> st[MAXN];
void Init(){
return;
}
void TypeLetter(char L){
s++;
cont++;
st[s].insert({cont,L});
sparse[cont][0]=cont-1;
fall(i,1,MAXL-1) sparse[cont][i]=sparse[sparse[cont][i-1]][i-1];
op[cont]=s;
}
void UndoCommands(int U) {
cont++;
sparse[cont][0]=cont-U-1;
fall(i,1,MAXL-1) sparse[cont][i]=sparse[sparse[cont][i-1]][i-1];
s=op[sparse[cont][0]];
op[cont]=s;
last=cont;
}
char GetLetter(int P) {
int x=cont;
int p=0;
while(true){
auto it=(--st[P].upper_bound({x,'z'}));
auto [j,ans]=*it;
if(sparse[x][p]==0 || op[sparse[x][p]]<P) return ans;
x=sparse[x][p];
p++;
}
}
# | 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... |