Cod sursa(job #307228)

Utilizator cypryCiprian Oprisa cypry Data 23 aprilie 2009 18:16:53
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<stdio.h>

#define LOG 20

int n,m;
int p[LOG][250001];

void citire(){
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d %d",&n,&m);
	int i;
	for(i=1;i<=n;++i)
		scanf("%d",p[0]+i);
}

void build(){
	int i,j;
	for(i=1;i<LOG;++i){
		for(j=1;j<=n;++j){
			p[i][j] = p[i-1][ p[i-1][j] ];
		}
	}
}

int find(int elem,int ord){
	if(ord > n) return 0;
	int i;
	for(i=LOG-1;i>=0;--i){
		if(ord >= 1<<i){
			elem=p[i][elem];
			ord -= (1<<i);
		}
	}
	return elem;
}

void job(){
	int i,elem,ord;
	for(i=0;i<m;++i){
		scanf("%d %d",&elem,&ord);
		printf("%d\n",find(elem,ord));
	}
}

int main(void){
	citire();
	build();
	job();
	return 0;
}