Cod sursa(job #473129)

Utilizator andrey932Andrei andrey932 Data 28 iulie 2010 09:55:45
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <iostream>
#include <stdio.h>
using namespace std;

#define NMAX 251001
#define MMAX 351001
FILE *fin=fopen("stramosi.in","r");
FILE *fout=fopen("stramosi.out","w");
int d[NMAX][30],i,j,n,m,x;

int stram(int a, int st) {
	int inc=262144,p=18;
	while(st>0) {
		while (st<inc) {
			p--;
			inc=inc>>1;
		}
		st-=inc;	
		if (a<=0&&st>0) return 0;
		a=d[a][p];
	}
	return a;	
}

int main()
{
	fscanf(fin,"%i %i",&n,&m);
	for(i=1;i<=n;i++) {
		fscanf(fin,"%i",&x);		
		d[i][0]=x;
	}
	for(i=1;i<=n;i++) {
		for(j=1;j<19;j++) {
			d[i][j]=d[ d[i][j-1] ][j-1];
		}
	}
	for(i=1;i<=m;i++) {
		fscanf(fin,"%i %i",&j,&x);
		fprintf(fout,"%i \n",stram(j,x));
	}
	fclose(fout);
	
	return 0;
}