Cod sursa(job #1778978)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 14 octombrie 2016 16:23:09
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
# include <fstream>

using namespace std;

# define MAX_N 250000
# define MAX_LG 20

int s[MAX_LG][1 + MAX_N];

int query( int p, int q ) {
    int i = 0;
    while ( p != 0 ) {
        if ( p % 2 != 0 )
            q = s[i][q];

        p /= 2;
        i ++;
    }
    return q;
}

int main() {
    ifstream fin( "stramosi.in" );
    ofstream fout( "stramosi.out" );

    int n, m, i, j, p, q;

    fin >> n >> m;

    for ( i = 1; i <= n; i ++ )
        fin >> s[0][i];

    for ( i = 1; ( 1 << i ) <= n; i ++ )
        for ( j = 1; j <= n; j ++ )
            s[i][j] = s[i - 1][s[i - 1][j]];

    for ( i = 0; i < m; i ++ ) {
        fin >> q >> p;
        fout << query( p, q ) << '\n';
    }

    fin.close();
    fout.close();

    return 0;
}