Cod sursa(job #1803820)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 11 noiembrie 2016 22:11:36
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

#define dbg(x) (cout<<#x<<" = "<<(x)<<'\n')

typedef long long int lld;
const int INF = (1LL << 30) - 1;
const lld LINF = (1LL << 62) - 1;
const int NMAX = 250000;
const int LMAX = 17;

int N, M;
int dad[LMAX + 1][NMAX + 5];

int query(int x, int p) {
  for (int i = 0; (1 << i) <= p && x; ++i) {
    if (p & (1 << i)) {
      x = dad[i][x];
    }
  }
  return x;
}

int main() {
  cin.sync_with_stdio(false);

  freopen("stramosi.in", "r", stdin);
  freopen("stramosi.out", "w", stdout);

  cin >> N >> M;

  for (int i = 1, x; i <= N; ++i) {
    cin >> dad[0][i];
  }

  for (int k = 1; (1 << k) <= N; ++k) {
    for (int i = 1; i <= N; ++i) {
      dad[k][i] = dad[k - 1][dad[k - 1][i]];
    }
  }

  while (M--) {
    int x, p;
    cin >> x >> p;
    cout << query(x, p) << '\n';
  }

  return 0;
}