int ops[1000005], prev[1000005], size[1000005], sz;
void Init(){
}
void TypeLetter(char L){
ops[sz] = L;
if(sz) size[sz] = size[prev[sz]]+1;
else size[sz] = 1;
sz++;
prev[sz] = sz-1;
}
void UndoCommands(int U){
prev[sz] = sz-U-1;
}
char GetLetter(int P){
int i = prev[sz];
int piv = size[i] - P - 1;
while (piv) {
i = prev[i];
piv--;
}
return ops[i];
}
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
int main() {
Init();
int cmd_num;
int 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;
}
Compilation message
/tmp/cciMF11m.o: In function `main':
scrivener.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/cc4aTBSI.o:grader.cpp:(.text.startup+0x0): first defined here
collect2: ld returned 1 exit status