Cod sursa(job #2153582)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 6 martie 2018 12:24:18
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
using namespace std;
const int NMAX = 250005;
int stram[NMAX][40];
int put(int nr) {
  int sol = 1;
  while(nr > 1) {
    nr /= 2;
    sol *= 2;
  }
  return sol;
}
int nrput(int nr) {
  int sol = 0;
  while(nr > 1) {
    nr /= 2;
    ++sol;
  }
  return sol;
}

int main() {
  int n, m;
  freopen("stramosi.in", "r", stdin);
  freopen("stramosi.out", "w", stdout);
  scanf("%d%d", &n, &m);
  for(int i = 1; i <= n; ++i) {
    scanf("%d", &stram[i][0]);
  }
  for(int i = 1; 1 << i <= n; ++i) {
    for(int j = 1; j <= n; ++j) {
      stram[j][i] = stram[stram[j][i - 1]][i - 1];
    }
  }
  for(int nrq = 0; nrq < m; ++nrq) {
    int q, p;
    scanf("%d%d", &q, &p);
    while(p > 0) {
      int pp = put(p);
      p -= pp;
      q = stram[q][nrput(pp)];
    }
    printf("%d\n", q);
  }
  return 0;
}