Cod sursa(job #1803816)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 11 noiembrie 2016 22:04:12
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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 = 18;

int N, M;
int dad[LMAX + 1][NMAX + 5];
vector<int> V[NMAX + 5];

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

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 >> x;
    dad[0][i] = x;
  }

  for (int k = 1; k < 18; ++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;
}