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 "grader.cpp"
#include <vector>
#include <iostream>
using namespace std;
const int MAXN = 1e6 + 5;
struct SegmentTree
{
char val;
SegmentTree *L, *R;
void build(int l, int r)
{
if(l==r) return;
L = new SegmentTree();
R = new SegmentTree();
L->build(l, (l+r)/2);
R->build((l+r)/2+1, r);
}
void update(int q, char c, int l, int r, SegmentTree *other)
{
val = other->val;
if(l==r && q==l)
{
val = c;
return;
}
if(l<=q && q<=(l+r)/2)
{
L = new SegmentTree();
L->update(q, c, l, (l+r)/2, other->L);
}
else
{
L = other->L;
}
if((l+r)/2+1<=q && q<=r)
{
R = new SegmentTree();
R->update(q, c, (l+r)/2+1, r, other->R);
}
else
{
R = other->R;
}
}
char getChar(int q, int l, int r)
{
if(l==r) return val;
if(l<=q && q<=(l+r)/2) return L->getChar(q, l, (l+r)/2);
return R->getChar(q, (l+r)/2+1, r);
}
};
struct String
{
int sz;
SegmentTree *s;
String(){}
String(int sz)
{
this->sz = sz;
this->s = new SegmentTree();
}
};
int COMMAND = 0;
String state[MAXN];
void Init()
{
state[0] = String(0);
state[0].s->build(0, MAXN);
}
void TypeLetter(char L)
{
COMMAND++;
state[COMMAND].sz = state[COMMAND-1].sz + 1;
state[COMMAND].s = new SegmentTree();
state[COMMAND].s->update(state[COMMAND].sz-1, L, 0, MAXN, state[COMMAND-1].s);
}
void UndoCommands(int U)
{
COMMAND++;
state[COMMAND] = state[COMMAND-1-U];
}
char GetLetter(int P)
{
return state[COMMAND].s->getChar(P, 0, MAXN);
}
# | 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... |