Cod sursa(job #164793)

Utilizator vlad.maneaVlad Manea vlad.manea Data 24 martie 2008 20:37:36
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>
#define nmax 250005
#define logmax 19

int M, N, logN;

int S[logmax][nmax];

int main()
{
	int i, k, p, a, log;

	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]);

	for (logN = 0; (1<<logN) <= N; ++logN);

	for (k = 1; k <= logN; ++k)
		for (i = 1; i <= N; ++i)
			if (S[k-1][S[k-1][i]])
				S[k][i] = S[k-1][S[k-1][i]];

	while (M--)
	{
		scanf("%d%d", &i, &k);

		for (p = 0, a = i; p < k && a; k-= (1<<log))
		{
			for (log = 0; (1<<log) <= k; ++log);
			if ((1<<log) > k) --log;
			a = S[log][a];
		}
		printf("%d\n", a);
	}

	return 0;
}