Pagini recente » Cod sursa (job #864372) | Cod sursa (job #1410971) | Cod sursa (job #748918) | Cod sursa (job #2489311) | Cod sursa (job #129102)
Cod sursa(job #129102)
#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 );
}