Cod sursa(job #894859)
#include<cstdio>
#include<algorithm>
using namespace std;
int s[20][250010],i,j,n,m,p[20],ip,a,b;
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",&s[0][i]);
p[0]=1;
p[1]=2;
for(i=1;p[i]<=n;i++,p[i]=p[i-1]<<1)
for(j=1;j<=n;j++)
s[i][j]=s[i-1][s[i-1][j]];
ip=i;
for(;m;--m)
{
scanf("%d%d",&b,&a);
for(;a && b;)
{
i=lower_bound(p,p+ip+1,a)-p;
if(p[i]!=a) i--;
a-=p[i];
b=s[i][b];
}
printf("%d\n",b);
}
return 0;
}