Cod sursa(job #2033980)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 7 octombrie 2017 12:37:26
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>

const int MAXN = 2e5 + 5e4;
const int LOG  = 20;

int dp[MAXN + 1][LOG + 1];

int main() {
  int n, m, q, p, ans, k;
  FILE *fin = fopen("stramosi.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    fscanf(fin, "%d", &dp[i][0]);
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; (1 << j) <= n; ++j) {
      dp[i][j] = dp[dp[i][j - 1]][j - 1];
    }
  }
  FILE *fout = fopen("stramosi.out", "w");
  for (int i = 0; i < m; ++i) {
    fscanf(fin, "%d%d", &q, &p);
    k = 0;
    ans = q;
    while (p) {
      if (p & 1) {
        ans = dp[ans][k];
      }
      ++k;
      p >>= 1;
    }
    fprintf(fout, "%d\n", ans);
  }
  fclose(fin);
  fclose(fout);
  return 0;
}