Submission #258798

#TimeUsernameProblemLanguageResultExecution timeMemory
258798SamAndCrayfish scrivener (IOI12_scrivener)C++17
100 / 100
635 ms67424 KiB
#include <bits/stdc++.h>
using namespace std;
#define m_p make_pair
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
typedef long long ll;
const int N = 1000006, m = 20;

int z;
char a[N];
int p[N][m];
int d[N];

vector<int> v;

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

void TypeLetter(char L)
{
    ++z;
    a[z] = L;
    p[z][0] = v.back();
    d[z] = d[v.back()] + 1;
    for (int i = 1; i < m; ++i)
        p[z][i] = p[p[z][i - 1]][i - 1];
    v.push_back(z);
}

void UndoCommands(int U)
{
    v.push_back(v[sz(v) - U - 1]);
}

char GetLetter(int P)
{
    ++P;
    int x = v.back();
    for (int i = m - 1; i >= 0; --i)
    {
        if (d[p[x][i]] >= P)
            x = p[x][i];
    }
    return a[x];
}
#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...