Cod sursa(job #226605)

Utilizator ilincaSorescu Ilinca ilinca Data 2 decembrie 2008 06:41:52
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>

#define maxn 250015
#define maxm 300015
#define pr(x) fprintf(stderr,#x" = %d\n",x)

int n, m, a [25] [maxn];

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

void stramosi ()
{
	int i, j;
	for (i=1; i <= 19; ++i)
	{
		for (j=1; j<=n; ++j)
			a [i] [j]=a [i-1] [a [i-1] [j]];
	}
}

int rez (int p, int q)
{
	int i, u;
	for (i=0, u=1; i<=18; ++i, u<<=1)
		if (q & u)
			p=a [i] [p];
	return p;
}

int main ()
{
	freopen ("stramosi.in", "r", stdin);
	freopen ("stramosi.out", "w", stdout);
	int p, q;
	scan ();
	stramosi ();
	for (int i=1; i<=m; ++i)
	{
		scanf ("%d%d", &p, &q);
		printf ("%d\n", rez (p, q));
	}
	return 0;
}