Cod sursa(job #307842)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 25 aprilie 2009 12:16:50
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#define N 250005
int e[20][N],n,m,v[N];
void read()
{
	scanf("%d%d",&n,&m);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&v[i]);
}
void precalculate()
{
	int i,j;
	for (i=1; i<=n; i++)
		e[0][i]=v[i];
	i=0;
	for(i=1 ; 1<<i <= n ; ++i)
		for(j=1 ; j<=n ; ++j)
			e[i][j]=e[i-1][e[i-1][j]];
}
int question(int q,int p)
{
	int i=0;
	while(p)
	{
		if (p%2==1) 
			q=e[i][q];
		p/=2;
		//x>>1; // x/=2
		++i;
	}
	return q;
}
void solve()
{
	int i,p,q;
	for (i=1; i<=m; i++)
	{
		scanf("%d%d",&q,&p);
		printf("%d\n",question(q,p));
	}
}
int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	read();
	precalculate();
	solve();
	return 0;
}