Pagini recente » Cod sursa (job #1509411) | Cod sursa (job #2050855) | Cod sursa (job #2606139) | Cod sursa (job #2136444) | Cod sursa (job #146604)
Cod sursa(job #146604)
#include <stdio.h>
#define in "stramosi.in"
#define out "stramosi.out"
#define NMAX 250005
#define KMAX 20
int ANC[KMAX][NMAX];
int M, N, X, Y, P;
int main()
{
freopen( in, "r", stdin );
freopen( out, "w", stdout );
scanf( "%d%d", &N, &M );
int i, k;
for ( i = 1; i <= N; ++i ) scanf( "%d", &ANC[0][i] );
for ( k = 1; k <= KMAX; ++k )
for ( i = 1; i <= N; ++i )
ANC[ k ][ i ] = ANC[ k - 1 ][ ANC[ k - 1][ i ] ];//2^k = al 2^k-1 nod a celui de-al 2^k-1
//nod, adica 2*(2^(k-1)) = 2^k
for ( ; M > 0; --M )
{
scanf( "%d%d", &X, &Y );
P = 20;
while ( Y )
{
while ( (1<<P) > Y ) P--;
Y -= (1<<P);//scad cea mai apropiata putere a lui 2 mai mica ca Y
X = ANC[P][X];
}
printf( "%d\n", X );
}
return 0;
}