Cod sursa(job #781271)
#include <cstdio>
const int logmax = 18 , maxn = 250150;
int A[logmax][maxn] , lg[maxn] , N , M;
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&N,&M);
for(int i = 1;i <= N;++i) {
scanf("%d",&A[0][i]);
lg[i + 1] = lg[(i + 1)>>1] + 1;
}
lg[N + 1] = 0;
for(int j = 1;j < logmax;++j)
for(int i = 1;i <= N;++i)
A[j][i] = A[j - 1][A[j - 1][i]];
for(int Q , P;M;M--)
{
scanf("%d %d",&Q,&P);
for(int l = lg[P];P;) {
Q = A[l][Q];
P -= (1<<l);
l = lg[P];
}
printf("%d\n",Q);
}
return 0;
}