Cod sursa(job #1356303)

Utilizator iarbaCrestez Paul iarba Data 23 februarie 2015 12:52:22
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.55 kb
#include <cstdio>
using namespace std;
int father[20][250001];
int i,j,n,m,k,p,q;
int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%ld%ld",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%ld",&father[1][i]);
	}
	for(j=2;j<=18;j++)
	{
		for(i=1;i<=n;i++)
		{
			father[j][i]=father[j-1][father[j-1][i]];
		}
	}
	for(i=1;i<=m;i++)
	{
		scanf("%ld%ld",&q,&p);
		j=1;k=1;
		while(k<p){j++;k*=2;}
		while(p)
		{
			while(k>p){j--;k/=2;}
			q=father[j][q];p-=k;
		}
		printf("%ld\n",q);
	}
return 0;
}