Cod sursa(job #3133986)

Utilizator stefanmo03Mocanu Stefan stefanmo03 Data 27 mai 2023 20:22:20
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
//#include <iostream>
#include <fstream>
#include<vector>

using namespace std;
std::ifstream cin("stramosi.in");
std::ofstream cout("stramosi.out");

int _2la_x(int val){
    if(val == 0) return 1;
    return 1<<val;
}
int log2(int val){
    if(val == 0 || val == 1)return 0;
    return 1 + log2(val>>1);
}

int main() {
    int n, m;
    vector<int> familie;
    cin>>n>>m;
    familie.push_back(0);
    for(int i=0;i<n;i++){
        int aux;
        cin>>aux;
        familie.push_back(aux);
    }
    int log2n = log2(n);
    int la[n+1][log2n+1]={0};
    for(int i = 0; i<n+1;i++){
        la[i][0] =familie[i];
    }
    for(int j = 1; j<=log2n;j++){
        la[0][j]=0;
        for(int i = 1; i<n+1;i++){
            la[i][j] = la[la[i][j-1]][j-1];
        }
    }
    for(int i=0;i<m;i++){
        int membru,nivel,res;
        cin>>membru>>nivel;
        res=membru;
        while(nivel){
            res = la[membru][log2(nivel)];
            nivel -= _2la_x(log2(nivel));
        }
        cout<<res<<"\n";
    }
    return 0;
}