Cod sursa(job #162298)

Utilizator lache92Hulub Ionut-Adrian lache92 Data 19 martie 2008 21:05:50
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
 #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;  
 }