Submission #590018

#TimeUsernameProblemLanguageResultExecution timeMemory
590018aciCrayfish scrivener (IOI12_scrivener)C++14
100 / 100
696 ms147424 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast") #define N 1000009 #define l 25 struct val { char c; int ref, dist; }; int pos = 0; vector<vector<int>> anc(N, vector<int> (l)); vector<val> v(N); void Init() { v[0] = {'$', 0, 0}; for(int i=0; i<l; i++) anc[0][i] = 0; } void TypeLetter(char L) { val last = v[pos]; v[pos+1] = {L, pos, last.dist+1}; pos++; anc[pos][0] = v[pos].ref; for(int i=1; i<l; i++) anc[pos][i] = anc[anc[pos][i-1]][i-1]; } void UndoCommands(int U) { int par = pos-U; val x = v[par]; pos++; v[pos] = x; anc[pos] = anc[par]; } char GetLetter(int P) { int livcurr = v[pos].dist; int steps = livcurr - P - 1; if(steps==0) return v[pos].c; int sol = pos; for(int i=0; i<l; i++) if( steps & (1<<i) ) sol = anc[sol][i]; return v[sol].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...