Submission #230808

#TimeUsernameProblemLanguageResultExecution timeMemory
230808arborCrayfish scrivener (IOI12_scrivener)C++14
34 / 100
581 ms59992 KiB
#include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define lc (i << 1) #define rc (i << 1 | 1) using namespace std; using ll = long long; using pii = pair<int, int>; const int MN = 1e6 + 5, LN = 17, MOD = 1e9 + 7, INF = 0x3f3f3f3f, BSZ = 320; char s[MN]; int spt[MN][20], dep[MN]; int cur; void Init() { } void TypeLetter(char L) { cur++; s[cur] = L; spt[cur][0] = cur - 1; dep[cur] = dep[cur - 1] + 1; for (int j = 1; j < LN; j++) spt[cur][j] = spt[spt[cur][j - 1]][j - 1]; } void UndoCommands(int U) { int last = cur - U; cur++; s[cur] = s[last]; int par = spt[last][0]; spt[cur][0] = par; dep[cur] = dep[par] + 1; for (int j = 1; j < LN; j++) spt[cur][j] = spt[spt[cur][j - 1]][j - 1]; } char GetLetter(int P) { P++; int now = cur; for (int j = LN - 1; j >= 0; j--) if (dep[spt[now][j]] >= P) now = spt[now][j]; return s[now]; } /* int main() { Init(); TypeLetter('a'); TypeLetter('b'); cout << GetLetter(1) << '\n'; TypeLetter('d'); UndoCommands(2); UndoCommands(1); cout << GetLetter(2) << '\n'; TypeLetter('e'); UndoCommands(1); UndoCommands(5); TypeLetter('c'); cout << GetLetter(2) << '\n'; UndoCommands(2) ; cout << GetLetter(2) << '\n'; } */
#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...