Cod sursa(job #1289790)

Utilizator ghimpeleSeteanu Radu ghimpele Data 10 decembrie 2014 12:19:50
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define NMax 250010
#define LogNMax 19

const char IN[] = "stramosi.in", OUT[] = "stramosi.out";

int N, M;
int P[NMax][LogNMax];

int search( int x, int p ) {

	int step = LogNMax - 1;

	for ( int i = 0; step >= 0; -- step )
		if ( i + ( 1<< step ) <= p ) {
			i += ( 1<< step );
			x = P[x][step];
		}

	return x;
}

int main() {

	freopen(IN, "r", stdin);
	freopen(OUT, "w", stdout);

	scanf("%d%d", &N, &M);
	for ( int i = 1; i <= N; ++ i )
		scanf("%d", &P[i][0]);

	for ( int j = 1; j < LogNMax; ++ j )
		for ( int i = 1; i <= N; ++ i )
			P[i][j] = P[P[i][j - 1]][j - 1];

	for ( int i = 1; i <= M; ++ i ) {
		int x, p;
		scanf("%d%d", &x, &p);
		printf("%d\n", search(x, p));
	}

	return 0;
}