제출 #370501

#제출 시각아이디문제언어결과실행 시간메모리
370501ijxjdjd크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++14
0 / 100
635 ms102252 KiB
#include <bits/stdc++.h> #define FR(i, N) for (int i = 0; i < int(N); i++) #define all(x) begin(x), end(x) using namespace std; using ll = long long; const int MAXN = (int)(1e6) + 5; const int MAXK = 21; int up[MAXN][MAXK]; int undo[MAXN][MAXK]; int depth[MAXN]; char res[MAXN]; int cnt = 1; int liftUp(int u, int d) { for (int i = 0; i < MAXK; i++) { if (d&(1<<i)) { u = up[u][i]; } } return u; } int liftUndo(int u, int d) { for (int i = 0; i < MAXK; i++) { if (d&(1<<i)) { u = undo[u][i]; } } return u; } void Init() { } void TypeLetter(char L) { res[cnt] = L; up[cnt][0] = cnt-1; undo[cnt][0] = cnt-1; for (int i = 1; i < MAXK; i++) { up[cnt][i] = up[up[cnt][i-1]][i-1]; undo[cnt][i] = undo[undo[cnt][i-1]][i-1]; } depth[cnt] = depth[cnt-1]; cnt++; } void UndoCommands(int U) { int next = liftUndo(cnt-1, U); res[cnt] = res[next]; up[cnt][0] = up[next][0]; undo[cnt][0] = cnt-1; for (int i = 1; i < MAXK; i++) { up[cnt][i] = up[up[cnt][i-1]][i-1]; undo[cnt][i] = undo[undo[cnt][i-1]][i-1]; } depth[cnt] = depth[next]; } char GetLetter(int P) { return res[liftUp(cnt-1, depth[cnt-1] - P - 1)]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...