Submission #1266588

#TimeUsernameProblemLanguageResultExecution timeMemory
1266588lambd47Crayfish scrivener (IOI12_scrivener)C++20
5 / 100
47 ms83708 KiB
#include<bits/stdc++.h>
using namespace std;
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(), (v).end()
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)

const int lg=20;
int at=0;
const int MX=1e6+7;
vector<vector<int>> dp(lg,vector<int> (MX,0));
vector<char> c(MX);
vector<int> prof(MX);

void calc(int aux){
    dp[0][at]=aux;
    L(i,1,lg-1){
        dp[i][at]=dp[i-1][dp[i-1][at]];
    }
}



void Init() {
    prof[0]=-1;
    c[at]='x';
    at++;
}

void TypeLetter(char L) {
    c[at]=L;
    prof[at]=prof[at-1]+1;
    calc(at-1);
    at++;
}

void UndoCommands(int U) {
    auto id=at-U-1;
    c[at]=c[id];
    prof[at]=prof[id];
    dp[at]=dp[id];
    at++;
}

char GetLetter(int P) {
    int id=at-1;
    int d=prof[id]-P;
    L(i,0,lg-1){
        if((1<<i)&d)id=dp[i][id];
    }
    return c[id];
}
#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...