Cod sursa(job #16053)

Utilizator adalLica Adela adal Data 11 februarie 2007 23:30:56
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>

long tata[250005][23],x,i,j,z,n,m,nod,p,q,nr;
FILE *f=fopen("stramosi.in","r");
FILE *g=fopen("stramosi.out","w");

int main()
{
 fscanf(f,"%ld %ld\n",&n,&m);
 for (i=1; i<=n; i++) {
   fscanf(f,"%ld",&x);
   tata[i][0]=x;
 }
 z=n;  x=1;
 while (z>1) { z=z/2; x++; }
 for (i=1; i<=n; i++)
  for (j=1; j<=x; j++) {
    tata[i][j]=tata[tata[i][j-1]][j-1];
  }
 for (i=1; i<=m; i++) {
   fscanf(f,"%ld %ld\n",&q,&p);
   nod=q; nr=p;
   while (nr>0) {
     z=nr; x=0;
     while (z>1) {z=z/2; x++ ;}
     if (nr>1) nr=nr-(1<<x); else nr=0;
     nod=tata[nod][x];
   }
   fprintf(g,"%ld\n", nod);
  }
  return 0;
}