Pagini recente » Cod sursa (job #2079130) | Cod sursa (job #2281591) | Cod sursa (job #1565776) | Cod sursa (job #166853) | Cod sursa (job #162298)
Cod sursa(job #162298)
#include <stdio.h>
#define nmax 250001
long a[nmax][21],b[nmax];
FILE *f,*g;
int main()
{
long n,m,i,j,p,q,x,nr,y,k;
f=fopen("stramosi.in","rt");
g=fopen("stramosi.out","wt");
fscanf(f,"%ld %ld\n",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f,"%ld",&b[i]);
a[i][0]=b[i];
}
for (i=1;i<=n;i++)
for (k=1;k<18;k++)
{
a[i][k] = a[ a[i][k-1] ] [k-1];
/* x=b[i];
y=1;
nr=1;
while (x&&a[i][0]<11)
{
nr*=2;
a[i][++a[i][0]]=x;
while (y<nr&&x)
{
y++;
x=b[x];
}
}*/
}
for (i=1;i<=m;i++)
{
fscanf(f,"%ld %ld\n",&p,&q);
/*
while (q)
{
nr=1;
y=0;
while (2*nr<=q&&y<17)
{nr*=2;y++;}
x=a[p][y];
p=x;
q-=nr;
}
*/
x = p;
for (y = 18; y >= 0; y--)
{
if (q >= (1<<y))
{
x = a[x][y];
q -= 1<<y;
}
}
fprintf(g,"%ld\n",x);
}
fclose(f);
fclose(g);
return 0;
}