Pagini recente » Cod sursa (job #2861738) | Cod sursa (job #578876) | Cod sursa (job #286931) | Cod sursa (job #1400743) | Cod sursa (job #335057)
Cod sursa(job #335057)
#include<cstdio>
#define MAXN ( 1 << 18 )
int N , M , logs[MAXN] , A[19][MAXN] , i , j , K , P;
void Preprocess () {
int logN;
for ( logN = 0 ; 1 << logN <= N ; logN ++ ) ;
for ( i = 1 ; i <= logN; ++i )
for( j = 1 ; j <= N ; ++j )
A[i][j] = A[i - 1] [A[i - 1][j]] ;
}
int query ( int K , int P )
{
for ( ; K > 0 ; ) {
P = A[logs[K]][P];
K -= ( 1 << logs[K] );
}
return P;
}
int main ()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&N ,&M );
for ( i = 1 ; i <= N ; ++i )
scanf("%d",& A[0][i] );
for (logs[0] = -1 , i = 1 ; i <= N ; ++i )
logs[i] = logs[ i / 2 ] + 1 ;
Preprocess();
for( ; M --; ) {
scanf("%d %d" ,&K ,&P );
printf("%d\n",query ( P , K ) ) ;
}
return 0;
}