Cod sursa(job #67388)

Utilizator peanutzAndrei Homorodean peanutz Data 24 iunie 2007 15:14:31
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#define NMAX 250003

int a[34][NMAX];
int n, m;

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

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

int main()
{
	freopen("stramosi.in", "r", stdin);
	freopen("stramosi.out", "w", stdout);

	read();
	pre();

	for(int k = 1, s, q, i, p; k <= m; ++k)
	{
		scanf("%d %d", &q, &s);

		while(s)
		{
			p = 1;
			i = -1;

			while(p <= s)
			{
				p <<= 1;
				++i;
			}
			q = a[i][q];
			s -= (p >> 1);
		}
		printf("%d\n", q);
	}

	return 0;
}