Cod sursa(job #27910)

Utilizator robbyRobertino robert robby Data 7 martie 2007 11:48:27
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 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;
}