Cod sursa(job #562227)

Utilizator Addy.Adrian Draghici Addy. Data 22 martie 2011 17:21:13
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>

#define NMAX 250050
#define LOG 19

int D[LOG][NMAX], n, m, k, i, p, q;

int stramos (int p, int q) {
	
	if (p == 0) return q;
	
	for (k = 0; (1 << k) <= p; k++) ;
	k >>= 1;
	
	return stramos (p - (1 << k), D[k][q]);
}

int main () {
	
	freopen ("stramosi.in", "r", stdin);
	freopen ("stramosi.out", "w", stdout);
	
	scanf ("%d %d", &n, &m);
	
	for (i = 1; i <= n; i++) {
		scanf ("%d", &k);
		D[0][i] = k;
	}
	
	for (k = 1; (1 << k) <= n + 1; k++)
		for (i = 1; i <= n; i++)
			D[k][i] = D[k-1][ D[k-1][i] ];
	
	for (i = 1; i <= m; i++) {
		scanf ("%d %d", &q, &p);
		printf ("%d\n", stramos (p, q));
	}
	
	return 0;
}