Submission #169306

#TimeUsernameProblemLanguageResultExecution timeMemory
169306AlexLuchianovCrayfish scrivener (IOI12_scrivener)C++14
34 / 100
1076 ms82936 KiB
int const nmax = 1000000;

char last;

int const lgmax = 20;

int far[1 + nmax][1 + lgmax], ptr = 0;
int level[1 + nmax];
char chr[1 + nmax];

void Init() {}

void TypeLetter(char L) {
  ++ptr;
  far[ptr][0] = ptr - 1;
  for(int h = 1; h < lgmax; h++)
    far[ptr][h] = far[far[ptr][h - 1]][h - 1];
  level[ptr] = level[far[ptr][0]] + 1;
  chr[ptr] = L;
}

void UndoCommands(int U) {
  ++ptr;
  far[ptr][0] = ptr - 1 - U;
  for(int h = 1; h < lgmax; h++)
    far[ptr][h] = far[far[ptr][h - 1]][h - 1];
  level[ptr] = level[far[ptr][0]];
}

char GetLetter(int P) {
  int pos = ptr;
  P++;
  for(int h = lgmax - 1; 0 <= h; h--)
    if(P <= level[far[pos][h]] )
      pos = far[pos][h];
  return chr[pos];
}

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