Submission #760804

#TimeUsernameProblemLanguageResultExecution timeMemory
760804Sohsoh84Crayfish scrivener (IOI12_scrivener)C++17
100 / 100
363 ms90552 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll MAXN = 1e6 + 10;
const ll LOG = 20;

vector<int> vec;
int cur, par[MAXN][LOG], H[MAXN];
char F[MAXN];

void Init() {
	cur = 0;
	vec.push_back(cur);
}

void TypeLetter(char L) {
	int v = int(vec.size());
	F[v] = L;
	H[v] = H[cur] + 1;

	par[v][0] = cur;
	cur = v;
	vec.push_back(cur);

	for (int i = 1; i < LOG; i++)
		par[v][i] = par[par[v][i - 1]][i - 1];
}

void UndoCommands(int U) {
	cur = vec[int(vec.size()) - 1 - U];
	vec.push_back(cur);
}

char GetLetter(int P) {
	int k = H[cur] - P - 1;
	int v = cur;

	for (int i = 0; i < LOG; i++)
		if (k >> i & 1)
			v = par[v][i];

	return F[v];
}
#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...