Cod sursa(job #544628)

Utilizator blastoiseZ.Z.Daniel blastoise Data 1 martie 2011 20:48:26
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <stdio.h>

int i,j,k,N,M,P,Q,sol,pow;
int T[30][250010];

int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);

	scanf("%d%d",&N,&M);

	for(i=1;i<=N;i++) scanf("%d",&T[0][i]);

	for(i=1;(1<<i)<=N;i++)
		for(j=1;j<=N;j++)
		{
			T[i][j]=T[i-1][j];
			k=1;
			while(k<=(1<<i)&&T[i][j]!=0)
			{
				T[i][j]=T[0][T[i][j]];
				k++;
			}
		}

	for(i=1;i<=M;i++)
	{
		scanf("%d%d",&P,&Q);
		pow=0;
		while((1<<pow)<=P) pow++;
		pow--;

		sol=T[pow][Q];
		k=P-(1<<pow);
		while(k)
		{
			sol=T[0][sol];
			k--;
		}
		printf("%d\n",sol);
	}

	return 0;
}