Cod sursa(job #1781894)

Utilizator TincaMateiTinca Matei TincaMatei Data 17 octombrie 2016 16:29:55
Problema Stramosi Scor 50
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_LOG][1+MAX_N];
int log[1+MAX_N];

int stramos(int a, int b) {
  while(b > 0) {
    a = d[log[b]][a];
    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[0][i] = x;
  }

  for(int i = 1; i <= MAX_LOG; i++)
    for(int j = 1; j <= n; j++)
      d[i][j] = d[i - 1][d[i - 1][j]];
  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;
}