Submission #1196984

#TimeUsernameProblemLanguageResultExecution timeMemory
1196984Hamed_GhaffariCrayfish scrivener (IOI12_scrivener)C++20
100 / 100
657 ms62932 KiB
#include <bits/stdc++.h>
using namespace std;

const int MXN = 1e6+5, LOG = 20;

int par[MXN][LOG], h[MXN], N, v;
char ch[MXN];
vector<int> vers;

void Init() {
    vers.push_back(0);
}

void TypeLetter(char c) {
    N++;
    par[N][0] = v;
    h[N] = h[v]+1;
    ch[N] = c;
    vers.push_back(v=N);
    for(int i=1; i<LOG; i++)
        par[v][i] = par[par[v][i-1]][i-1];
}

void UndoCommands(int x) {
    v = vers[int(vers.size())-x-1];
    vers.push_back(v);
}

char GetLetter(int p) {
    int u = v;
    p++;
    for(int i=LOG-1; i>=0; i--)
        if(h[par[u][i]]>=p)
            u = par[u][i];
    return ch[u];
}
#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...