Cod sursa(job #1946837)

Utilizator stoianmihailStoian Mihail stoianmihail Data 30 martie 2017 15:29:21
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 250000
#define MAX_LOG 18

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

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

  int i, u, p;
  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", &rmq[0][i]);
  }

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

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