Cod sursa(job #349666)

Utilizator proflaurianPanaete Adrian proflaurian Data 21 septembrie 2009 08:31:45
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>
int n,m,i,j,cnt,s[18][250002],P,Q,DQ,ss,L;
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&s[0][i]);
		if(s[0][i])cnt++;
	}
}
void solve()
{
	i=0;
	for(;cnt;)
	{
		i++;
		cnt=0;
		for(j=1;j<=n;j++)
			if(s[i-1][j])
			{
				ss=s[i-1][s[i-1][j]];
				if(ss){cnt++;s[i][j]=ss;}
			}
	}
	for(;m;m--)
	{
		scanf("%d%d",&P,&Q);
		for(L=0,DQ=1;Q;L++,DQ<<=1)
			if(Q&DQ)
			{
				Q-=DQ;P=s[L][P];
			}
		printf("%d\n",P);
	}
}