Cod sursa(job #199443)

Utilizator ProtomanAndrei Purice Protoman Data 18 iulie 2008 20:38:07
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <algorithm>
#define mx 250010

using namespace std;

long ac[mx][22];
long n, m, x, p, q;

int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%ld %ld", &n, &m);
	for (int i = 1; i <= n; i++)
	{
		scanf("%ld", &x);
		ac[i][1] = x;
	}
	for (int i = 1; i <= n; i++)
	{
		long r = ac[i][1];
		for (int j = 1; j < 20; j++)
		{
			r = ac[r][j];
			ac[i][j + 1] = r;
		}
	}
	for (int i = 0; i < m; i++)
	{
		scanf("%ld %ld", &q, &p);
		int x = 0;
		while ((1 << x) <= p)
			x++;
		while (p && q)
		{
			x--;
			if ((1 << x) <= p)
			{
				q = ac[q][x + 1];
				p -= (1 << x);
			}
		}
		printf("%ld\n", q);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}