이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int sigma = 26;
const int nmax = 1e6 + 5;
const int logmax = 21;
int n, ind;
int p[nmax + 1];
int h[nmax + 1];
int fiu[nmax + 1][sigma + 1];
int d[nmax + 1][logmax + 1];
char ch[nmax + 1];
void Init() {
n = 1;
for (int i = 0; i < sigma; ++ i)
fiu[1][i] = -1;
ind = 0;
p[0] = 1;
}
void TypeLetter(char L) {
++ ind;
p[ind] = p[ind - 1];
if (fiu[p[ind]][L - 'a'] == -1) {
++ n;
fiu[p[ind]][L - 'a'] = n;
h[n] = h[p[ind]] + 1;
for (int i = 0; i < sigma; ++ i)
fiu[n][i] = -1;
p[ind] = n;
ch[n] = L;
d[n][0] = p[ind - 1];
for (int i = 1; i < logmax; ++ i) {
d[n][i] = d[d[n][i - 1]][i - 1];
}
} else {
p[ind] = fiu[p[ind]][L - 'a'];
}
}
void UndoCommands(int U) {
++ ind;
p[ind] = p[ind - U - 1];
}
char GetLetter(int P) {
int dif = h[p[ind]] - P - 1;
int x = p[ind];
for (int i = logmax - 1; i >= 0; -- i) {
if (dif & (1 << i))
x = d[x][i];
}
return ch[x];
}
# | 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... |