Pagini recente » Cod sursa (job #2671189) | Cod sursa (job #1245357)
#include<stdio.h>
#define Max 250003
FILE*f=fopen("stramosi.in","r");
FILE*g=fopen("stramosi.out","w");
long a[Max],m,n,q,b[20][Max];;
long stramos(long p, long q)
{
long k,sol;
k=0;
while(1<<k<=p) ++k;
k--;
if(p==0) return q;
else return stramos(p-(1<<k),b[k][q]);
}
void precalc()
{
int i,j,k=2;
for(i=1;i<=n;++i)
b[1][i]=a[a[i]],b[0][i]=a[i];
for(k=2;1<<k<=n;++k)
{
for(i=1;i<=n;++i) b[k][i]=b[k-1][b[k-1][i]];
}
}
int main()
{
long i,p;
long sol;
fscanf(f,"%ld %ld",&n,&m);
for(i=1;i<=n;++i) fscanf(f,"%ld",&a[i]);
precalc();
for(i=1;i<=m;++i)
{
fscanf(f,"%ld %ld",&q,&p);
sol=stramos(p,q);
fprintf(g,"%ld\n",sol);
}
return 0;
}