Cod sursa(job #167413)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 29 martie 2008 16:17:17
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define N 250002
#define K 20
int n,m,p,q,rez;
int mat[N][K],str[N];
void scan()
{
 	freopen("stramosi.in","r",stdin);
 	freopen("stramosi.out","w",stdout);
 	scanf("%d %d\n",&n,&m);
 	scanf("%d", &mat[1][0]);
 	for (int i=2;i<=n;i++)
 	{
  		str[i]=str[i/2]+1;
  		scanf("%d", &mat[i][0]);
 	}
}
void make()
{ 	
	for (int i=1;i<=n;i++)
  		for (int j=1;j<=str[n];j++)
  		{
  	 		if (!mat[ mat[i][j-1] ][j-1])
    				break;
   			mat[i][j]=mat[ mat[i][j-1] ][j-1];
  		}
}
void solve()
{ 	
	for (int i=0;i<m;i++)
 	{
  		scanf("%d %d\n",&q,&p);
  		while (p)
  		{
   			rez=mat[q][str[p]];
   			p-=(1<<str[p]);
   			q=rez;                                  
  		}
  	printf("%d\n", rez);
 	}
}
int main()
{
	scan();
	make();
	solve();
	return 0;
}