Pagini recente » Cod sursa (job #1198999) | Cod sursa (job #2833471) | Cod sursa (job #3188871) | Cod sursa (job #1600458) | Cod sursa (job #108608)
Cod sursa(job #108608)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
FILE *fin,*fout;
int n,m,a[20][250005];
int main()
{
int i,j,ls,x,t,putere2,p2initial,ind;
fin=fopen("stramosi.in","r");
fout=fopen("stramosi.out","w");
fscanf(fin,"%d %d",&n,&m);
for(j=1;j<=n;j++)
fscanf(fin,"%d",&a[0][j]);
ls=(int)floor( log2(n) )+1;
for(i=1;i<=ls;i++)
for(j=1;j<=n;j++)
if(a[i-1][j])
a[i][j]=a[i-1][ a[i-1][j] ];
else
a[i][j]=0;
for(i=0;i<m;i++)
{fscanf(fin,"%d %d",&x,&t);
while(x && t)
{p2initial=putere2=t^(t&(t-1));
ind=0;
while(putere2>1)
{ind++;
putere2>>=1;}
t-=p2initial;
x=a[ind][x];}
fprintf(fout,"%d\n",x);}
fclose(fin);fclose(fout);
return 0;
}