Cod sursa(job #500724)

Utilizator andrey_porscheGraur Andrei andrey_porsche Data 12 noiembrie 2010 22:26:51
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
# include <cstdio>

const char *FIN = "stramosi.in", *FOU = "stramosi.out" ;
const int MAX = 250000, lim = 31 ;

int V[lim][MAX] ;
int N, M ;

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;
    scanf ( "%d %d", &N, &M ) ;
    for ( int i = 0; i < N; ++i ) {
        scanf ( "%d", V[0] + i + 1 ) ;
    }

    for ( int i = 1; i < lim; ++i ) {
        for ( int j = 1; j <= N; ++j ) {
            V[i][j] = V[i - 1][ V[i - 1][j] ] ;
        }
    }

    for ( int a, b ; M ; --M ) {
        scanf ( "%d %d", &a, &b ) ;
        for ( int i = 0; b ; ++i, b >>= 1 ) {
            if ( b & 1 ) {
                a = V[i][a] ;
            }
        }
        printf ( "%d\n", a ) ;
    }
}