Cod sursa(job #337445)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 3 august 2009 17:43:24
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <algorithm>
using namespace std;

#define DIM 250001
#define LOG 18

int n, m, sol[ LOG ][ DIM ];

int calc( int p, int q ) {

    int i;

    for( i = 0; ( 1 << ( i + 1 ) ) <= q; ++ i );
    q -= ( 1 << i );
    if( !q )
        return sol[ i ][ p ];

    return calc( sol[ i ][ p ], q );
}

void calc_sol() {

    int i, j;

    for( i = 1; i < LOG; ++ i )
        for( j = 1; j <= n; ++ j )
            sol[ i ][ j ] = sol[ i - 1 ][ sol[ i - 1 ][ j ] ];
}

void solve() {

    int i, p, q;

    scanf( "%d%d", &n, &m );
    for( i = 1; i <= n; ++ i )
        scanf( "%d", &sol[ 0 ][ i ] );
    calc_sol();
    for( i = 0; i < m; ++ i ) {

        scanf( "%d%d", &p, &q );
        printf( "%d\n", calc( p, q ) );
    }
}

int main() {

    freopen( "stramosi.in", "r", stdin );
    freopen( "stramosi.out", "w", stdout );

    solve();

    return 0;
}