Pagini recente » Cod sursa (job #695760) | Cod sursa (job #585621) | Cod sursa (job #2178536) | Cod sursa (job #105396) | Cod sursa (job #211093)
Cod sursa(job #211093)
#include<stdio.h>
long b[20][250001],a[250001],n,i,m,k,p,q;
long stramos(long p,long q)
{long k;
if(p==1)return a[q];
for(k=0;;++k)if(1<<(k+1)>p)break;
if(p-(1<<k)<=0)return b[k][q];
else return stramos(p-(1<<k),b[k][q]);
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;++i)scanf("%ld",&a[i]);
for(i=1;i<=n;++i)b[1][i]=a[a[i]];
k=2;
while(1<<k<=n)
{
for(i=1;i<=n;++i)b[k][i]=b[k-1][b[k-1][i]];
++k;
}
for(i=1;i<=m;++i)
{scanf("%ld%ld",&q,&p);
printf("%ld\n",stramos(p,q));}
return 0;
}