Cod sursa(job #1100776)

Utilizator pulseOvidiu Giorgi pulse Data 7 februarie 2014 14:33:46
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <cmath>

using namespace std;

#define NMAX 250003

int n, m, p, q, logaritm;
int best[18][NMAX];

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

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

	logaritm = log2 (n);

	for (int i = 1; i <= logaritm; ++i)
	{
		for (int j = 1; j <= n; ++j)
			best[i][j] = best[i - 1][best[i-1][j]];
	}

	for (int i = 1; i <= m; ++i)
	{
		scanf ("%d %d", &q, &p);
		p <<= 1;
		for (int j = 0; j <= logaritm; ++j)
		{
			if (q == 0) break;
			p >>= 1;
			if (p & 1) q = best[j][q];
		}

		printf ("%d\n", q);
	}

	return 0;
}