Submission #393246

#TimeUsernameProblemLanguageResultExecution timeMemory
393246HazemCrayfish scrivener (IOI12_scrivener)C++14
60 / 100
1092 ms86460 KiB
#include <bits/stdc++.h>
//#include "grader.h"

using namespace std;
 
#define S second
#define F first
#define LL long long 
 
const int N = 1e6+10;
const LL MOD = 1e9+7;
const LL LINF = 1e18;
const LL INF = 1e9;


char s[N];
int par[N][21],len[N];
int cnt = 1;

char last;

void Init() {}

void buildst(int x,int pr){
	
	par[x][0] = pr;
	len[x] = len[pr];
	int cur = pr;
	for(int i=1;i<=20;i++)
		par[x][i] = par[cur][i-1],cur = par[cur][i-1];
}

void TypeLetter(char L) {

	buildst(cnt,cnt-1);
	len[cnt]++;
	s[cnt] = L;
	cnt++;
}

void UndoCommands(int U) {
	
	buildst(cnt,cnt-U-1);
	cnt++;
}

char GetLetter(int P) {
	
	cnt--;
	
	P++;
	int cur = cnt;
	for(int i=20;i>=0;i--)
		if(len[par[cur][i]]>=P)cur = par[cur][i];
	
	cnt++;
	return s[cur];
}
#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...