Cod sursa(job #483636)

Utilizator cosmyoPaunel Cosmin cosmyo Data 9 septembrie 2010 15:04:55
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
#define NMAX 250005
#define in freopen("stramosi.in","r",stdin)
#define out freopen("stramosi.out","w",stdout)
using namespace std;
long n,a[32][NMAX],t[NMAX],m,w,p;
long str(long k)
{ if(p<w&&t[k]>0)
	{++p;
     return str(t[k]);
	}
	else
 if(p==w)
	 return k;
  else
 if(t[k]==0)
	 return 0;
}
int main()
{in;
 out;
 long P,q,i,j;
  scanf("%ld %ld",&n,&m);
	  for(i=1;i<=n;++i)
		  scanf("%ld",&t[i]);
 for(i=1;i<=n;++i)
	 a[0][i]=t[i];
 w=1;
 for(i=1;i<=30;++i)
	  for(j=1;j<=n;++j)
		a[i][j]=a[i-1][a[i-1][j]]; 
 for(j=1;j<=m;++j)
	 {scanf("%ld %ld",&q,&P);
      p=P;
	   while(p)
	   {w=1;
	    i=0;
	     while(w<=p){++i;w*=2;}
		w/=2;
		p=p-w;
		--i;
        q=a[i][q];
	   }		
	  printf("%ld\n",q);
	 }
 fclose(stdin);
 fclose(stdout);
 return 0;
}