Cod sursa(job #3306317)

Utilizator razvanmrt_06Mariuta Razvan razvanmrt_06 Data 9 august 2025 16:42:00
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>

using namespace std;

const int Nmax = 250005;

int n, m, F[Nmax], dp[Nmax][25];
// dp[nod][i] = stramosul cu nr 2^i al lui nod

void RMQ(){
    for(int i = 1; i <= n; i++){
        dp[i][0] = F[i];
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= 20; j++){
            dp[i][j] = dp[dp[i][j-1]][j-1];
        }
    }
}

int main()
{
    ifstream fin("stramosi.in");
    ofstream fout("stramosi.out");
    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        int aux;
        fin >> aux;
        F[i] = aux;
    }

    RMQ();

    for(int i = 1; i <= m; i++){
        int P, Q;
        fin >> Q >> P;
        for(int j = 20; j >= 0; j--){
            if((1 << j) <= P){
                Q = dp[Q][j];
                P -= (1 << j);
            }
        }
        fout << Q << "\n";
    }

    return 0;
}