#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1;
int n = N-1,ver,cnt,root[N],len[N];
struct node{ char c; int left,right; }tree[N*20];
int clone(int x){ tree[++cnt] = tree[x]; return cnt; }
void build(int l,int r,int idx)
{
tree[idx] = {0,idx*2,idx*2+1};
cnt = max(cnt,idx);
if(l==r) return;
int m = (l+r)/2;
build(l,m,idx*2),build(m+1,r,idx*2+1);
}
int update(int l,int r,int idx,int x,char c)
{
int now = clone(idx);
if(l==r)
{
tree[now] = {c,idx,idx};
return now;
}
int m = (l+r)/2;
if(x<=m) tree[now].left = update(l,m,tree[now].left,x,c);
else tree[now].right = update(m+1,r,tree[now].right,x,c);
return now;
}
char read(int l,int r,int idx,int x)
{
if(l==r) return tree[idx].c;
int m = (l+r)/2;
if(x<=m) return read(l,m,tree[idx].left,x);
else return read(m+1,r,tree[idx].right,x);
}
void Init(){ build(1,n,1),root[0] = 1; }
void TypeLetter(char c){ root[ver+1] = update(1,n,root[ver],len[ver]+1,c),len[ver+1] = len[ver]+1,ver++; }
void UndoCommands(int u){ root[ver+1] = root[ver-u],len[ver+1] = len[ver-u],ver++; }
char GetLetter(int x){ return read(1,n,root[ver],x+1); }
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
25 ms |
24952 KB |
Output is correct |
2 |
Correct |
25 ms |
24960 KB |
Output is correct |
3 |
Correct |
24 ms |
24952 KB |
Output is correct |
4 |
Correct |
27 ms |
24960 KB |
Output is correct |
5 |
Correct |
27 ms |
24960 KB |
Output is correct |
6 |
Correct |
25 ms |
24960 KB |
Output is correct |
7 |
Correct |
26 ms |
24952 KB |
Output is correct |
8 |
Correct |
24 ms |
24960 KB |
Output is correct |
9 |
Correct |
25 ms |
24960 KB |
Output is correct |
10 |
Correct |
26 ms |
24960 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
24 ms |
24952 KB |
Output is correct |
2 |
Correct |
25 ms |
24960 KB |
Output is correct |
3 |
Correct |
25 ms |
24960 KB |
Output is correct |
4 |
Correct |
24 ms |
24960 KB |
Output is correct |
5 |
Correct |
25 ms |
24960 KB |
Output is correct |
6 |
Correct |
24 ms |
24952 KB |
Output is correct |
7 |
Correct |
24 ms |
24960 KB |
Output is correct |
8 |
Correct |
25 ms |
24960 KB |
Output is correct |
9 |
Correct |
24 ms |
24960 KB |
Output is correct |
10 |
Correct |
24 ms |
24960 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
25 ms |
25344 KB |
Output is correct |
2 |
Correct |
26 ms |
25344 KB |
Output is correct |
3 |
Correct |
26 ms |
25472 KB |
Output is correct |
4 |
Correct |
26 ms |
25728 KB |
Output is correct |
5 |
Correct |
26 ms |
25472 KB |
Output is correct |
6 |
Correct |
27 ms |
25856 KB |
Output is correct |
7 |
Correct |
27 ms |
25856 KB |
Output is correct |
8 |
Correct |
27 ms |
25728 KB |
Output is correct |
9 |
Correct |
26 ms |
25728 KB |
Output is correct |
10 |
Correct |
26 ms |
25472 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
395 ms |
173176 KB |
Output is correct |
2 |
Correct |
397 ms |
188664 KB |
Output is correct |
3 |
Correct |
415 ms |
185080 KB |
Output is correct |
4 |
Correct |
444 ms |
151672 KB |
Output is correct |
5 |
Correct |
467 ms |
163704 KB |
Output is correct |
6 |
Correct |
396 ms |
202360 KB |
Output is correct |
7 |
Correct |
435 ms |
108764 KB |
Output is correct |
8 |
Correct |
420 ms |
154232 KB |
Output is correct |
9 |
Correct |
464 ms |
205688 KB |
Output is correct |
10 |
Correct |
326 ms |
156788 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
445 ms |
150648 KB |
Output is correct |
2 |
Correct |
514 ms |
135032 KB |
Output is correct |
3 |
Correct |
419 ms |
146424 KB |
Output is correct |
4 |
Correct |
480 ms |
113912 KB |
Output is correct |
5 |
Correct |
406 ms |
158584 KB |
Output is correct |
6 |
Correct |
377 ms |
150648 KB |
Output is correct |
7 |
Correct |
395 ms |
159356 KB |
Output is correct |
8 |
Correct |
483 ms |
86392 KB |
Output is correct |
9 |
Correct |
516 ms |
138232 KB |
Output is correct |
10 |
Correct |
340 ms |
155640 KB |
Output is correct |