Cod sursa(job #424766)

Utilizator NemultumituMatei Ionita Nemultumitu Data 25 martie 2010 10:27:56
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <cstring>
int n,m;
int stram[20][250050];
bool desc[20];

void intr()
{
	int nod,nr,max;
	scanf("%d%d",&nod,&nr);
	memset(desc,0,sizeof(desc));
	for (int i=0;nr;++i)
		if (1<<i&nr)
		{
			desc[i]=1;
			nr-=1<<i;
			max=i;
		}
	int st=nod;
	int i=max;
	do
	{
		if (desc[i])
			st=stram[i][st];
	}
	while (i--);
	printf("%d\n",st);
}
	

void citire()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;++i)
		scanf("%d",&stram[0][i]);
}

void proces()
{
	for (int j=1;1<<j<=n;++j)
		for (int i=1;i<=n;++i)
			stram[j][i]=stram[j-1][stram[j-1][i]];
}

int main()
{
	freopen ("stramosi.in","r",stdin);
	freopen ("stramosi.out","w",stdout);
	citire();
	proces();
	while (m--)
		intr();
	
	return 0;
}