Cod sursa(job #1781900)

Utilizator TincaMateiTinca Matei TincaMatei Data 17 octombrie 2016 16:33:19
Problema Stramosi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>

const int MAX_N = 250000;
const int MAX_LOG = 18;
int d[1+MAX_N][1+MAX_LOG];
int log[1+MAX_N];

int stramos(int a, int b) {
  while(b > 0) {
    a = d[a][log[b]];
    b = b - (1 << log[b]);
  }
  return a;
}

int main() {
  int n, m, a, b, x;
  FILE *fin = fopen("stramosi.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for(int i = 1; i <= n; ++i) {
    if(i >= 2)
      log[i] = log[i / 2];
    fscanf(fin, "%d", &x);
    d[i][0] = x;
  }

  for(int i = 1; i <= MAX_LOG; i++)
    for(int j = 1; j <= n; j++)
      d[j][i] = d[d[j][i - 1]][i - 1];
  FILE *fout = fopen("stramosi.out", "w");
  for(int i = 0; i < m; i++) {
    fscanf(fin, "%d%d", &a, &b);
    fprintf(fout, "%d\n", stramos(a, b));
  }

  fclose(fin);
  fclose(fout);
  return 0;
}