Pagini recente » Cod sursa (job #3303452) | Cod sursa (job #717390) | Cod sursa (job #3346457) | Cod sursa (job #2665330) | Cod sursa (job #2580212)
#include<bits/stdc++.h>
using namespace std;
const int N=250005;
int p[N][20];
int lg2[N];
int query(int poz,int rk){
poz=p[poz][lg2[rk]];
rk-=(1<<lg2[rk]);
if(rk==0)
return poz;
return query(poz,rk);
}
int main()
{
FILE*fin,*fout;
fin=fopen("stramosi.in","r");
fout=fopen("stramosi.out","w");
int n,q;
fscanf(fin,"%d%d",&n,&q);
for(int i=1;i<=n;i++){
fscanf(fin,"%d",&p[i][0]);
}
lg2[1]=0;
for(int i=2;i<N;i++)
lg2[i]=lg2[i/2]+1;
for(int log=1;log<20;log++){
for(int i=1;i<=n;i++){
p[i][log]=p[p[i][log-1]][log-1];
}
}
for(int i=1;i<=q;i++){
int poz,rk;
fscanf(fin,"%d%d",&poz,&rk);
fprintf(fout,"%d\n",query(poz,rk));
}
return 0;
}