Cod sursa(job #218497)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 2 noiembrie 2008 12:27:07
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define FIN "stramosi.in"
#define FOUT "stramosi.out"
#define N 250001
#define LOG 20
int a[LOG][N],n,m,b2[1001],r;
int ancestor(int q,int p){
	int x=q,r,j=0;
	while(p){
		r=p&1;
		if(r)
			x=a[j][x];
		j++;
		p>>=1;
	}
	return x;
}

void scan(void){
	int i;
	freopen(FIN,"r",stdin);
	freopen(FOUT,"w",stdout);
	scanf("%d%d\n",&n,&m);
	for(i=1;i<=n;i++)
		scanf("%d",&a[0][i]);
}
void solve(void){
    int i,j,k,logN;
    logN=ceil(log(n)/log(2));
    for(k=1;k<=logN;k++)
		for(i=1;i<=n;i++)
	a[k][i]=a[k-1][a[k-1][i]];
    while(m--){
		scanf("%d%d",&i,&j);
		k=ancestor(i,j);
		printf("%d\n",k);
	}
}
void print(void){
    fclose(stdin);
	fclose(stdout);
	exit(0);
}
int main(void){
	scan();
	solve();
	print();
}