# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
234542 | 2020-05-24T12:43:35 Z | crossing0ver | Crayfish scrivener (IOI12_scrivener) | C++17 | 0 ms | 0 KB |
#include<bits/stdc++.h> using namespace std; int operations; char lastchar[1000005]; int P[1000005][20],sz[1000005]; void init() { } void TypeLetter(char L){ operations++; P[operations][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 & (1 << i)) { cur = P[cur][i]; } } return lastchar[cur]; }