Cod sursa(job #4085)

Utilizator rapidu36Victor Manz rapidu36 Data 30 decembrie 2006 12:05:05
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<stdio.h>
#include<math.h>
#define N 250001
#define M 300001
#define L 18
int n,m,a[N][L];
int stra(int q,int p){
	int x=q,r,j=0;
	while(p){
		r=p&1;
		if(r)
			x=a[x][j];
		j++;
		p>>=1;
	}
	return x;
}
int main(){
	FILE *in=fopen("stramosi.in","r"),*out=fopen("stramosi.out","w");
	int i,j,p,q,ll;
	fscanf(in,"%d%d",&n,&m);
	for(i=1;i<=n;i++)
		fscanf(in,"%d",&a[i][0]);
	ll=(int)floor(log(n)/log(2));
	for(j=1;j<L;j++)
		for(i=1;i<=n;i++)
			a[i][j]=a[a[i][j-1]][j-1];
	for(;m;m--){
		fscanf(in,"%d%d",&q,&p);
		fprintf(out,"%d\n",stra(q,p));
	}
	fclose(in);
	fclose(out);
	return 0;
}