Cod sursa(job #1231798)

Utilizator yololy97Olaru Bogdan-Ioan yololy97 Data 21 septembrie 2014 16:24:30
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>
#include <cmath>
#define logN 19
#define N 250001
using namespace std;
int parent[logN][N], n, m, P, Q, v[100];
void solve(){
	int r = P;
	int t = 0;
	while(r){
		v[t++] = r % 2;
		r /= 2;
	}
	int nod = Q;
	for(int i = t - 1; i >= 0; --i)
		if(v[i])
			nod = parent[i][nod];
	printf("%d\n", nod);
}
int main(){
	freopen("stramosi.in", "r", stdin);
	freopen("stramosi.out", "w", stdout);
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= n; ++i)
		scanf("%d ", &parent[0][i]);
	for(int k = 1; k <= 18; ++k)
		for(int j = 1; j <= n; ++j)
			parent[k][j] = parent[k-1][parent[k-1][j]];
	for(int i = 1; i <= m; ++i){
		scanf("%d %d ", &Q, &P);
		solve();
	}
}