Cod sursa(job #198865)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 15 iulie 2008 15:31:12
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#define N 250001
#define LOG 20
int n,m,b[LOG][N],c=0;
int log(int x){
	int c=0;
	while(x!=1){
		x/=2;
		c++;
	}
	return c;
}
void gen(){
	int i,j,lg;
	lg=log(n);
	for(i=1;i<=lg;i++)
		for(j=1;j<=n;j++)
			b[i][j]=b[i-1][b[i-1][j]];
}
int raspunde(int x,int y){//returneaza stramosul x al lui y
	int i=0;
	while(y){
		if(y%2)
			x=b[i][x];
		y/=2;
		++i;
	}
	return x;
}
void intrebari(){
	int i,p,q;
	for(i=1;i<=m;i++){
		scanf("%d%d",&q,&p);
		c=0;
		printf("%d\n",raspunde(q,p));
	}
}
int main(){
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int j=1;j<=n;j++)
		scanf("%d",&b[0][j]);
	gen();
	intrebari();
	
	return 0;
}