Submission #18849

#TimeUsernameProblemLanguageResultExecution timeMemory
18849suhgyuho_williamCrayfish scrivener (IOI12_scrivener)C++98
5 / 100
299 ms91896 KiB
int rear,cnt;
int par[1000010][22];
int next[1000010];
char a[1000010];

void Init(){
	rear = cnt = 0;
}

void TypeLetter(char L) {
	int i;

	rear++; cnt++;
	next[cnt] = rear;
	a[rear] = L;
	par[rear][0] = next[rear-1];
	for(i=1; i<=19; i++){
		par[rear][i] = par[par[rear][i-1]][i-1];
	}
}

void UndoCommands(int U) {
	cnt++;
	next[cnt] = next[cnt-U];
}

char GetLetter(int P) {
	int i,x;
	int ans;

	ans = rear;
	x = next[cnt]-(P+1);
	for(i=19; i>=0; i--){
		if(x == 0) break;
		if(x >= (1 << i)){
			x -= (1 << i);
			ans -= (1 << i);
		}
	}
	return a[ans];
}
#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...