Cod sursa(job #194476)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 11 iunie 2008 08:49:57
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 kb
#include<stdio.h>
#define N 250005
long n,m,v[N][18],a[N],p,q,l,i,j;
int main(){
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%ld%ld",&n,&m);
	a[1]=0;
	scanf("%ld",&v[1][0]);
	for(i=2;i<=n;i++){
		a[i]=a[i/2]+1;
		scanf("%ld",&v[i][0]);
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=a[n];j++){
			if(!v[v[i][j-1]][j-1])
				break;
			v[i][j]=v[v[i][j-1]][j-1];
		}
	for (i=0;i<m;i++){
		scanf("%ld %ld\n",&q,&p);
		while(p){
			l=v[q][a[p]];
			p-=(1<<a[p]);
			q=l;
		}
		printf("%d\n",l);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}