Submission #241597

#TimeUsernameProblemLanguageResultExecution timeMemory
241597johuthaCrayfish scrivener (IOI12_scrivener)C++17
34 / 100
1100 ms165012 KiB
#include <iostream> #include <vector> #include <cassert> using namespace std; int upr[1000001][21]; int upu[1000001][21]; char ch[1000001]; int len[1000001]; int cnt = 0; int bck = 0; void Init() { cnt = 1; bck = 0; for (int i = 0; i < 21; i++) { upr[0][i] = 0; upu[0][i] = 0; } } void update(int id) { for (int i = 1; i < 21; i++) { upu[id][i] = upu[upu[id][i - 1]][i - 1]; upr[id][i] = upr[upr[id][i - 1]][i - 1]; } } void TypeLetter(char L) { ch[cnt] = L; len[cnt] = len[bck] + 1; upu[cnt][0] = bck; upr[cnt][0] = bck; update(cnt); bck = cnt; cnt++; } void UndoCommands(signed U) { int ld = bck; for (int i = 0; i < 21; i++) { if (U & (1<<i)) { ld = upu[ld][i]; } } ch[cnt] = ch[ld]; upr[cnt][0] = upr[ld][0]; upu[cnt][0] = bck; len[cnt] = len[ld]; update(cnt); bck = cnt; cnt++; } char GetLetter(signed P) { int u = len[bck] - 1 - P; int c = bck; for (int i = 0; i < 21; i++) { if (u & (1<<i)) { c = upr[c][i]; } } return ch[c]; }
#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...