제출 #1337125

#제출 시각아이디문제언어결과실행 시간메모리
1337125julia_08크레이피쉬 글쓰는 기계 (IOI12_scrivener)C++20
100 / 100
376 ms62984 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e6 + 10;

char op[MAXN];

int node[MAXN], depth[MAXN];

int dp[20][MAXN];

int cnt, nodes, cur;

void Init(){

  depth[0] = 0;
  cnt = cur = 0;

}

void TypeLetter(char l){

  cnt ++; nodes ++; // adiciona uma node

  depth[nodes] = depth[cur] + 1; // o pai dessa node eh o cur
  op[nodes] = l;

  node[cnt] = nodes; // qual eh o no que o cnt representa?

  dp[0][nodes] = cur;

  for(int k=1; k<20; k++) dp[k][nodes] = dp[k - 1][dp[k - 1][nodes]];

  cur = nodes;

}

void UndoCommands(int u){

  cnt ++;
  node[cnt] = node[cnt - u - 1];

  cur = node[cnt]; // agora o no subiu

}

char GetLetter(int p){

  int x = cur; // qual eh o cnt atual? (cur = node[cnt])

  for(int k=19; k>=0; k--){
    if(depth[dp[k][x]] > p){
      x = dp[k][x];
    }
  }

  return op[x];

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