Submission #760652

#TimeUsernameProblemLanguageResultExecution timeMemory
760652ymmCrayfish scrivener (IOI12_scrivener)C++17
100 / 100
412 ms89464 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (l); --x) typedef long long ll; using namespace std; const int lg = 20; const int N = 1<<lg; struct { int anc[lg]; int len; char l; } node[N]; int pos = 0; void Init() {} void TypeLetter(char L) { int v = pos+1; node[v].anc[0] = pos; Loop (i,1,lg) node[v].anc[i] = node[node[v].anc[i-1]].anc[i-1]; node[v].len = node[pos].len+1; node[v].l = L; ++pos; } void UndoCommands(int U) { memcpy(&node[pos+1], &node[pos-U], sizeof(*node)); ++pos; } char GetLetter(int P) { //string s; //for (int v = pos; node[v].l; v = node[v].anc[0]) // s += node[v].l; //reverse(s.begin(), s.end()); //cout << s << '\n'; P = node[pos].len - 1 - P; int v = pos; LoopR (i,0,lg) { if (!(P & (1<<i))) continue; v = node[v].anc[i]; } return node[v].l; }
#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...