Pagini recente » Cod sursa (job #3265265) | Cod sursa (job #372203) | Cod sursa (job #2953207) | Cod sursa (job #914337) | Cod sursa (job #1803821)
#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);
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; ++i) {
scanf("%d", &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;
scanf("%d%d", &x, &p);
printf("%d\n", query(x, p));
}
return 0;
}