Submission #1001335

#TimeUsernameProblemLanguageResultExecution timeMemory
1001335ZeroCoolCrayfish scrivener (IOI12_scrivener)C++14
100 / 100
507 ms86608 KiB
#include <bits/stdc++.h>
 
using namespace std;


void Init() {}

const int N = 1e6 + 20, LOG = 20;

int n;
int  up[N][LOG], dep[N];
char A[N];

void TypeLetter(char c) {
	++n;
	A[n] = c;
	up[n][0] = n - 1;
	dep[n] = dep[n-1] + 1;
	
	for(int i = 1;i < LOG;i++)up[n][i] = up[up[n][i-1]][i-1];
	

}

void UndoCommands(int x) {
	++n;
	up[n][0] = n - x - 1;
	dep[n] = dep[n - x - 1];
	for(int i = 1;i < LOG;i++)up[n][i] = up[up[n][i-1]][i-1];
	
}

char GetLetter(int x) {
	++x;
	int u = n;
	for(int i = LOG - 1;i >= 0;i--){
		if(dep[up[u][i]] >= x){
			u = up[u][i];
		}
	}
	return A[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...