Pagini recente » Cod sursa (job #1938845) | Cod sursa (job #2209472) | Cod sursa (job #1083176) | Cod sursa (job #1469546) | Cod sursa (job #131684)
Cod sursa(job #131684)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "stramosi.in"
#define out "stramosi.out"
#define dim 250001
int N, M;
int A[20][dim]; // A[i][j] - al 2^i-lea stramos a lui j
int K;
int Search(int,int);
int main()
{
int X, Y;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &M);
for ( int i = 1; i <= N; i++ )
{
scanf("%d", &X);
A[0][i] = X;
}
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 ( ; M; M-- )
{
scanf("%d%d", &X, &Y);
printf("%d\n", Search(X,Y) );
}
}
int Search(int X, int Y)
{
K = 18;
while ( (1<<K) > Y ) --K;
Y -= (1<<K);
if ( !Y ) return A[K][X];
return Search( A[K][X], Y );
}