Cod sursa(job #3354195)

Utilizator AlexOprescu21Oprescu Alexandru AlexOprescu21 Data 16 mai 2026 11:47:30
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 250005;
const int LOGMAX = 20;

int rmq[NMAX][LOGMAX];
int parinte[NMAX];

void preprocesare(int n){
    for(int i = 0; (1<<i)<=n; i++){
        rmq[0][i] = 0;
        for(int nod = 1; nod<=n; nod++){
            rmq[nod][0] = parinte[nod];
        }
    }
    for(int i = 1; (1<<i)<=n; i++){
        for(int nod = 1; nod<=n; nod++){
            rmq[nod][i] = rmq[rmq[nod][i-1]][i-1];
        }
    }
    
}

int interogare(int nod, int nr, int logn){
    for(int i = logn; i>=0; i--){
        if((nr & (1<<i)))
            nod = rmq[nod][i];
    }
    return nod;
}

int main(){
    int N, M;
    fin>>N>>M;
    int logn = log2(N);
    for(int nod = 1; nod<=N; nod++){
        fin>>parinte[nod];
    }
    preprocesare(N);
    for(int i = 0; i<M; i++){
        int Q, P;
        fin>>Q>>P;
        fout<<interogare(Q, P, logn)<<"\n";
    }
}