Cod sursa(job #2883942)

Utilizator Mihai_EduardMihai Eduard Mihai_Eduard Data 1 aprilie 2022 23:57:41
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int NMAX=250005;

///rmq[i][j]=al 2^j-lea stramos al lui nodului i sau 0 in caz ca nu are
int N, M, lg, rmq[NMAX][32];

void buildSparseTable(){
    for(int i=1;i<=N;i++){
        fin>>rmq[i][0];
        for(int j=1;j<lg;j++){
            rmq[i][j]=rmq[rmq[i][j-1]][j-1];
        }
    }
}

int kthAncestor(int nod, int k){
    for(int i=0;i<lg;i++){
        if(k&(1<<i))
            nod=rmq[nod][i];
    }
    return nod;
}

int main()
{
    fin>>N>>M;

    while((1<<lg)<=N)
        lg++;
    buildSparseTable();

    int x, y;
    while(M--){
        fin>>x>>y;
        fout<<kthAncestor(x,y)<<'\n';
    }

    fin.close();
    fout.close();
}