Cod sursa(job #544647)

Utilizator blastoiseZ.Z.Daniel blastoise Data 1 martie 2011 21:34:32
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>
#include <string.h>

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

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=i-2;
			while(k>=0)
			{
				T[i][j]=T[k][T[i][j]];
				k--;
			}
			T[i][j]=T[0][T[i][j]];
		}

	for(i=1;i<=M;i++)
	{
		scanf("%d%d",&Q,&P);
		
		sol=Q;
		pow=17;
		while(pow>=0)
		{
			if((1<<pow)<=P)
			{
				sol=T[pow][sol];
				P-=(1<<pow);
			}
			pow--;
		}

		printf("%d\n",sol);
	}

	return 0;
}