# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
234539 | 2020-05-24T12:40:51 Z | crossing0ver | Crayfish scrivener (IOI12_scrivener) | C++17 | 0 ms | 0 KB |
#include<bits/stdc++.h> #include "scrivener.h" using namespace std; int operations; char lastchar[1000005]; int P[1000005][20],sz[1000005]; void init() { } void TypeLetter(char L){ operations++; P[oprerations][0] = operations - 1; sz[operations] = sz[operations - 1] + 1; for (int i = 1; i < 20; i ++) P[operations][i] = P[ P[operations][i-1] ][i-1]; lastchar[operations] = L; } void UndoCommands(int U) { operations++; sz[operations] = sz[operations - 1 - U]; P[operations][0] = P[operations - 1 - U][0]; lastchar[operations]= lastchar[operations - 1 - U]; for (int i = 1; i < 20; i ++) P[operations][i] = P[ P[operations][i-1] ][i-1]; } char GetLetter(int P) { int x = sz[operations] - P - 1; int cur = operations; for (int i = 0; i < 20 ;i++) { if (x & i) { cur = P[cur][i]; } } return lastchar[cur]; }