제출 #234549

#제출 시각아이디문제언어결과실행 시간메모리
234549crossing0ver크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++17
100 / 100
894 ms86648 KiB
#include<bits/stdc++.h>
using namespace std;        
int operations;
char lastchar[1000005];
int P[1000005][20],sz[1000005];
void Init() {}    

void TypeLetter(char L){
	operations++;
	P[operations][0] = operations - 1;
	sz[operations] = sz[operations - 1] + 1;
	for (int i = 1; i < 20; i ++)
		P[operations][i] = P[ P[operations][i-1] ][i-1];
	lastchar[operations] = L;
}

void UndoCommands(int U) {
	operations++;
	sz[operations] = sz[operations - 1 - U];
	P[operations][0] = P[operations - 1 - U][0];
	lastchar[operations]= lastchar[operations - 1 - U];
	for (int i = 1; i < 20; i++)
		P[operations][i] = P[ P[operations][i-1] ][i-1];
}


char GetLetter(int p) {
	int x = sz[operations] - p - 1;
	int cur = operations;
	for (int i = 0; i < 20 ;i++) {
		if (x & (1 << i)) {
			cur = P[cur][i];
		}
	}
	return lastchar[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...