이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
int upr[1000001][21];
int upu[1000001][21];
char ch[1000001];
int len[1000001];
int cnt = 0;
int bck = 0;
void Init()
{
cnt = 1;
bck = 0;
for (int i = 0; i < 21; i++)
{
upr[0][i] = 0;
upu[0][i] = 0;
}
}
void update(int id)
{
for (int i = 1; i < 21; i++)
{
upu[id][i] = upu[upu[id][i - 1]][i - 1];
upr[id][i] = upr[upr[id][i - 1]][i - 1];
}
}
void TypeLetter(char L)
{
ch[cnt] = L;
len[cnt] = len[bck] + 1;
upu[cnt][0] = bck;
upr[cnt][0] = bck;
update(cnt);
bck = cnt;
cnt++;
}
void UndoCommands(signed U)
{
int ld = bck;
for (int i = 0; i < 21; i++)
{
if (U & (1<<i))
{
ld = upu[ld][i];
}
}
ch[cnt] = ch[ld];
upr[cnt][0] = upr[ld][0];
upu[cnt][0] = bck;
len[cnt] = len[ld];
update(cnt);
bck = cnt;
cnt++;
}
char GetLetter(signed P)
{
int u = len[bck] - 1 - P;
int c = bck;
for (int i = 0; i < 21; i++)
{
if (u & (1<<i))
{
c = upr[c][i];
}
}
return ch[c];
}
# | 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... |