Cod sursa(job #1289795)

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

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

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

int search( int x, int p ) {

	int step;
	for ( int i = 0; i <= 18; ++ i )
		if ( ( 1 << i ) & p )
			x = P[i][x];

	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[0][i]);

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

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

	return 0;
}