Cod sursa(job #575891)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 8 aprilie 2011 20:49:09
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<stdio.h>

using namespace std;

FILE *f=fopen("stramosi.in","r");
FILE *g=fopen("stramosi.out","w");

int a[19][262144],M,N,x,q,p,t,log[262144];

int main(){
	
	fscanf(f,"%d%d",&N,&M);
	
	for(int i=1;i<=N;i++){
		fscanf(f,"%d",&x),a[0][i]=x;
	}
	
	log[1]=0;
	for(int i=2;i<=N;++i)
			log[i]=log[i/2]+1;
	
	for(int i=1;i<19;i++)
		for(int j=1;j<=N;j++)
			a[i][j]=a[i-1][a[i-1][j]];
		
	for(int i=1;i<=M;i++){
		fscanf(f,"%d%d",&q,&p);
		
		while(p){
			q=a[log[p]][q]; //vom afla pentru al 2^log(p)-lea stramosul a lui Q
			p=p-(1<<((log[p]))); //al p-2^log(p) lea stramos al acestuia
		}
		fprintf(g,"%d\n",q);
	}
return 0;
}