Cod sursa(job #335057)

Utilizator klamathixMihai Calancea klamathix Data 28 iulie 2009 15:23:19
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#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;
}