Cod sursa(job #1930039)

Utilizator stoianmihailStoian Mihail stoianmihail Data 18 martie 2017 14:27:23
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <map>

using std::map;

#define MAX_N 300000
#define MAX_LOG 18

int N, M;
int d[MAX_LOG + 1][MAX_N + 1];
map <int, int> lg;

int main(void) {
  int i;
  FILE *f = fopen("stramosi.in", "r");

  lg[1] = 0;
  for (i = 1; i <= MAX_LOG; i++) {
    lg[1 << i] = i;
  }

  fscanf(f, "%d %d", &N, &M);
  for (i = 1; i <= N; i++) {
    fscanf(f, "%d", &d[0][i]);
  }

  int u;
  for (i = 1; i <= MAX_LOG; i++) {
    for (u = 1; u <= N; u++) {
      d[i][u] = d[i - 1][d[i - 1][u]];
    }
  }

  freopen("stramosi.out", "w", stdout);
  while (M) {
    fscanf(f, "%d %d", &u, &i);
    while (i) {
      u = d[lg[i & -i]][u];
      i &= i - 1;
    }
    fprintf(stdout, "%d\n", u);
    M--;
  }
  fclose(f);
  fclose(stdout);
  return 0;
}