Cod sursa(job #180603)

Utilizator MarquiseMarquise Marquise Data 17 aprilie 2008 11:30:18
Problema Stramosi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>

#define NMAX 250005
#define KMAX 18

int N, M, m[KMAX][NMAX];


int putere(int a)
{
	int p = 0;

	while ( ( 1 << p) <= a )
		p++;

	p--;

	return p;
}


void rezolv()
{
	int k, i;

	for  ( k = 1; k <= KMAX; k++)
		for ( i = 1; i <= N; i++)
			m[k][i] = m[k-1][m[k-1][i]];
}


int main()
{
	int a, b, i, p;

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

	scanf("%d %d", &N, &M);
	for ( i = 1; i <= N; i++)
		scanf("%d", &m[0][i]);

	rezolv();

	for ( i = 1; i <= M; i++)
	{
		scanf("%d %d", &a, &b);

		while ( b != 0)
		{
			p = putere(b);
			a = m[p][a];
			b -= (1 << p);
		}

		printf("%d\n", a);

	}
	return 0;
}