Cod sursa(job #3297605)

Utilizator Dv1de2906Barbu David Dv1de2906 Data 22 mai 2025 23:42:37
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>

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

int N,M,P,Q, up[250001][18];

int main(){
    fin >> N >> M;
    int log = 0;
    while ( (1 << log) <= N){
        log++;
    }

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

    for ( int i = 1; i < log; i++ ){
        for ( int node = 1; node <= N; node++ ){
            up[node][i] = up[up[node][i-1]][i-1];
        }
    }

    for ( int i = 0; i < M; i++ ){
        fin >> Q >> P;

        // for ( int j = 0; j < log; j++ ){
        //     if ( P & (1<<j) ){
        //         Q = up[Q][j];
        //         if ( Q == 0 ){
        //             break;
        //         }
        //     }
        // }
        // fout << Q << '\n';

        int p = 0;

        while(P){
            if ( 1 & P ){
                Q = up[Q][p];
            }
            P >>= 1;
            p++;
        }
        fout << Q << '\n';
    }

    return 0;
}