Cod sursa(job #1760410)

Utilizator blatulInstitutul de Arta Gastronomica blatul Data 20 septembrie 2016 19:19:21
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <fstream>
using namespace std;

#define Nmax 250002
#define LogN 18

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

int D[LogN][Nmax];

int main(){

    int N, M;

    fin >> N >> M;

    for( int i = 1; i <= N; ++i )
        fin >> D[0][i];

    for( int i = 1; ( 1<<i ) <= N; ++i )
        for( int j = 1; j <= N; ++j )
            D[i][j] = D[i-1][D[i-1][j]];

    int Q, P;
    while( M-- ){
        fin >> Q >> P;

        while(P){
            int poz = 31 - __builtin_clz(P);
            Q = D[poz][Q];
            P ^= (1 << poz);
        }

        fout << Q << "\n";
    }

    return 0;
}