Cod sursa(job #138497)

Utilizator Pharaoh****** Pharaoh Data 18 februarie 2008 18:42:14
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <stdio.h>
#define nmax 250001

long a[nmax][21],b[nmax];

FILE *f,*g;
int main(){

  long n,m,i,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];

  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;
	}

      fprintf(g,"%ld\n",x);
 }
  
  fclose(f); fclose(g);

  return 0;

}