Cod sursa(job #124343)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 18 ianuarie 2008 22:12:37
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#include <math.h>

long b[20][250000], n, m, a[250000];

long query(long p, long q)
{
	long k = 0;
	while (1<<k <= p) ++k;
	k--;
	if (p==0) return q;
	else return query(p-(1<<k),b[k][q]);
}

int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	long i, k, p, q, rez;
	scanf("%ld %ld",&n,&m);
	for (i = 1; i <= n; i++)
		scanf("%ld",&a[i]);
	for (i = 1; i <= n; ++i)
	{
		b[1][i] = a[a[i]];
		b[0][i] = a[i];	
	}


	for (k = 2; 1<<k <= n; ++k)
		for (i = 1; i <= n; ++i) b[k][i] = b[k - 1][b[k - 1][i]];

	for (i = 1; i <= m; i++)
	{
		scanf("%ld %ld", &q, &p);
		rez = query(p,q);
		printf("%ld\n", rez);
	}
	return 0;
}