Submission #260453

#TimeUsernameProblemLanguageResultExecution timeMemory
260453youssefbou62Crayfish scrivener (IOI12_scrivener)C++14
100 / 100
527 ms67288 KiB
#include <bits/stdc++.h>

#define pb push_back 
#define sz(x)	(int)x.size()
#define fi first 
#define se second 
using namespace std ; 

const int MAXN = 1e6+6 ;

char val[MAXN]; 
int cnt,t,node,pos[MAXN],len[MAXN],par[MAXN][20]; 

void Init() {

}

void new_state(int s){
	for(int i=1;i<19;i++){
		par[s][i] = par[par[s][i-1]][i-1]; 
	}

}

int kth_anc(int u,int k){
	for(int i = 18 ; i >= 0 ; i-- ){
		if(k&(1<<i)){
			k-=(1<<i); 
			u = par[u][i] ; 
		}
	}
	return u; 
}


void TypeLetter(char L) {
	t ++ ; 
	pos[t] = cnt ; 
	par[cnt][0] = node; 
	len[cnt] = len[node] + 1 ; 
	node = cnt; 
	val[cnt] = L ; 
	new_state(node); 
	cnt ++ ; 

		
}

void UndoCommands(int U) {
	node = pos[t-U];
	t++ ; 
	pos[t] = node ; 
}


char GetLetter(int P) {
	int L = len[node] ; 
	// cerr << len[node] << endl; 
	return val[kth_anc(pos[t],L-P-1)]; 

}


// int main() {
//   Init();

//   int cmd_num;
//   bool tmp = scanf("%d", &cmd_num);
//   assert(tmp == 1);

//   int i;
//   for (i = 0; i < cmd_num; i++) {
//     char cmd;
//     tmp = scanf(" %c", &cmd);
//     assert(tmp == 1);
//     if (cmd == 'T') {
//       char letter;
//       tmp = scanf(" %c", &letter);
//       assert(tmp == 1);
//       TypeLetter(letter);
//     }
//     else if (cmd == 'U') {
//       int number;
//       tmp = scanf("%d", &number);
//       assert(tmp == 1);
//       UndoCommands(number);
//     }
//     else if (cmd == 'P') {
//       int index;
//       char letter;
//       tmp = scanf("%d", &index);
//       assert(tmp == 1);
//       letter = GetLetter(index);
//       printf("%c\n", letter);
//     }
//   }
  
//   puts("Let's test for cheating!!");

//   return 0;

// }
#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...