Cod sursa(job #3360330)

Utilizator torjexPetrescu Andrei torjex Data 12 iulie 2026 14:54:57
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int NMAX = 250002;
const int LOG = 20;
int binLift[NMAX][LOG];
int n,q;

void buildBL() {
    for (int i=1;(1<<i)<=n;i++) {
        for (int node=1;node<=n;node++) {
            binLift[node][i] = binLift[binLift[node][i-1]][i-1];
        }
    }
}

int GetKthAncestor(int node,int k) {
    for (int i=0;(1<<i)<=k;i++) {
        if (k & (1<<i)) {
            node = binLift[node][i];
        }
    }
    return node;
}

int main()
{
    fin>>n>>q;
    for (int i=1;i<=n;i++) {
        fin>>binLift[i][0];
    }
    buildBL();
    int x,y;
    for (int i=0;i<q;i++) {
        fin>>x>>y;
        fout<<GetKthAncestor(x,y)<<'\n';
    }
    return 0;
}