Cod sursa(job #108608)

Utilizator stef2nStefan Istrate stef2n Data 22 noiembrie 2007 23:44:50
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#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;
}