Cod sursa(job #1946903)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 30 martie 2017 16:24:07
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <map>

using std::map;

#define MAX_N 250000
#define MAX_LOG 17

int N, M;
int boss[MAX_LOG + 1][MAX_N + 1];
map <int, int> log;

int main() {

  FILE *fin = fopen("stramosi.in", "r");
  FILE *fout = fopen("stramosi.out", "w");

  int i, j, u;
  int P, Q;

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

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

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


  for (i = 1; i <= M; i++) {
    fscanf(fin, "%d %d", &Q, &P);
    while (P) {
      int last_bit = P & -P;
      Q = boss[log[last_bit]][Q];
      P &= (P - 1);
    }
    fprintf(fout, "%d\n", Q);
  }




  return 0;
}