Cod sursa(job #79690)

Utilizator vladcoderVlad Ion vladcoder Data 23 august 2007 15:00:51
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>
#include <string.h>
#define NMAX 250005
#define LOGMAX 19
#define FIN "stramosi.in"
#define FOUT "stramosi.out"

int A[LOGMAX][NMAX];
int N, M, i, j, p, q;
FILE * fin, * fout;

void build()
{
	int i, j;
	for( i = 1; i < LOGMAX; i++)
		for( j = 1; j <= N; j++) A[i][j] = A[ i-1][A[i-1][j]];
}
int query( int nod, int niv )
{
	int step = 0;
	while ( 1 << step < niv ) step ++;
	while ( niv && nod )
	{
		while ( 1 << step > niv ) step--;
		nod = A[step][nod];
		niv -= 1 << step;
	}
	return nod;
}
int main()
{
	fin = fopen( FIN, "r" );
	fout = fopen( FOUT, "w" );
	fscanf( fin, "%d %d\n", &N, &M );
	memset( A, 0, sizeof(A));
	for( i = 1; i <= N; i++ ) fscanf( fin , "%d", &A[0][i] );
    build();
	while (M)
	{
		fscanf( fin, "%d %d\n", &p, &q );
		fprintf( fout, "%d\n", query( p, q ) );
		M--;
	}

	return 0;
	fclose( fin );
	fclose( fout );
}