Submission #120473

#TimeUsernameProblemLanguageResultExecution timeMemory
120473KieranHorgan크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++17
5 / 100
230 ms63436 KiB
#include <bits/stdc++.h>
using namespace std;

char charOfStep[1000005];
int depth[1000005];
int kthAncestor[1000005][21];
int curStep = 0;

void Init() {}

void TypeLetter(char L) {
	curStep++;
	charOfStep[curStep] = L;
	depth[curStep] = depth[curStep-1]+1;
	kthAncestor[curStep][0] = curStep-1;
	for(int i = 1; 1<<i <= depth[curStep]; i++)
		kthAncestor[curStep][i] = kthAncestor[kthAncestor[curStep][i-1]][i-1];
}

void UndoCommands(int U) {
	curStep++;
	charOfStep[curStep] = charOfStep[curStep-1-U];
	depth[curStep] = depth[curStep-1-U];
	copy(kthAncestor[curStep], kthAncestor[curStep]+21, kthAncestor[curStep-1-U]);
}

char GetLetter(int P) {
  int node = curStep;
  for(int i = 21; i >= 0; i--)
  	if(depth[node] - (1<<i) >= P+1)
  		node = kthAncestor[node][i];
  return charOfStep[node];
}
#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...