Cod sursa(job #197289)

Utilizator cristitalauCristian Talau cristitalau Data 3 iulie 2008 10:55:39
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#define QMAX 300005
#define NMAX 250005
#define LOG 18
int M, N;
int P[LOG][NMAX]; // P[a][b] al 2^b-lea parinte a lui a.

int main(void)
{
	int i , j , jm1,  tmp,  parinte, nod, exp, pp2;
	freopen("stramosi.in", "r", stdin);
	freopen("stramosi.out", "w", stdout);
	
	scanf("%d %d", &N, &M);
	for( i = 0; i< N; i++)
		scanf("%d", &P[0][i+1]);
	for( j = 1, jm1 = 0; j < LOG;  ++j,  ++jm1)
		for( i = 1, N++; i < N; i++)
			P[j][i] = P [jm1][ P[jm1][i]];
	
	for( i = 0; i < M; i++){
		scanf("%d %d ", &nod, &parinte);	
		while(parinte){
			for (tmp = 1, exp = 0, pp2 = (parinte>>1); tmp <= pp2; tmp <<=1, ++exp);
			nod = P[exp][nod], parinte  = parinte - tmp;
		}			
		printf("%d\n", nod);
	}	
	return 0;
}