Cod sursa(job #1781928)

Utilizator TincaMateiTinca Matei TincaMatei Data 17 octombrie 2016 16:59:25
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 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 main() {
  int n, m, a, b, bit;
  FILE *fin = fopen("stramosi.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for(int i = 1; i <= n; ++i) {
    fscanf(fin, "%d", &d[0][i]);
  }

  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);
    bit = 0;
    while(b > 0) {
      if(b % 2 == 1)
        a = d[bit][a];
      b = b / 2;
      bit++;
    }
    fprintf(fout, "%d\n", a);
  }

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