Cod sursa(job #197288)

Utilizator cristitalauCristian Talau cristitalau Data 3 iulie 2008 10:50:38
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 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 ,  tmp,  parinte, nod, exp;
	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; j < LOG; j++)
		for( i = 1; i < N+1; i++)
			P[j][i] = P [j-1][ P[j-1][i]];
	
	for( i = 0; i < M; i++){
		scanf("%d %d ", &nod, &parinte);
		
		while(parinte){
			for (tmp = 1, exp = 0; (tmp<<1) <= parinte; tmp <<=1, ++exp);
			nod = P[exp][nod];
			parinte  = parinte - tmp;
		}			
		printf("%d\n", nod);
	}	
	
	return 0;
}