Submission #390746

#TimeUsernameProblemLanguageResultExecution timeMemory
390746AmineTrabelsiCrayfish scrivener (IOI12_scrivener)C++14
100 / 100
714 ms90556 KiB
#include <bits/stdc++.h>
const int M = 1e6+5;
int pos = 1;
int parent[M];
int lift[M][20],depth[M];
char lett[M];
void Init(){
}
void TypeLetter(char L){
    int curr = pos;
    parent[curr] = pos;
    lett[curr] = L;
    if(curr)lift[curr][0] = parent[curr-1];
    for(int i=1;lift[curr][i-1];i++){
        lift[curr][i] = lift[lift[curr][i-1]][i-1];
    }
    depth[curr] = depth[lift[curr][0]]+1;
    pos++;

}
void UndoCommands(int U){
    parent[pos] = parent[pos-U-1];
    pos++;
}
char GetLetter(int P){
    int curr = parent[pos-1];
    for(int i=19;i>=0;i--){
        if(depth[lift[curr][i]]>= P+1){
            curr = lift[curr][i];
        }
    }
    return lett[curr];
}
#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...