Cod sursa(job #544647)
#include <stdio.h>
#include <string.h>
int T[30][250100];
int i,j,k,N,M,sol,pow,P,Q;
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++) scanf("%d",&T[0][i]);
for(i=1;(1<<i)<=N;i++)
for(j=1;j<=N;j++)
{
T[i][j]=T[i-1][j];
k=i-2;
while(k>=0)
{
T[i][j]=T[k][T[i][j]];
k--;
}
T[i][j]=T[0][T[i][j]];
}
for(i=1;i<=M;i++)
{
scanf("%d%d",&Q,&P);
sol=Q;
pow=17;
while(pow>=0)
{
if((1<<pow)<=P)
{
sol=T[pow][sol];
P-=(1<<pow);
}
pow--;
}
printf("%d\n",sol);
}
return 0;
}