Cod sursa(job #3266593)

Utilizator Luca07Nicolae Luca Luca07 Data 9 ianuarie 2025 16:19:47
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<vector>
using namespace std;

ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

vector<vector<int> > vparent;
vector<int> vpow;

int main(){
    int n,m,i,j,nr,u,v;
    int pw=1;

    cin>>n>>m;
   
    vparent.push_back(vector<int>(2,0));
    vpow.push_back(1);
    for(i=1;i<=n;i++){
        cin>>nr;
        if((1<<pw)<nr){
            pw++;
        }
        vparent.push_back(vector<int>(pw+1,0));
        vpow.push_back(pw);
        vparent[i][0]=nr;
    }
    for(j=1;j<=pw;j++){
        for(i=1;i<=n;i++){
            vparent[i][j]=vparent[vparent[i][j-1]][j-1];
        }
    }

    while(m--){
        cin>>u>>nr;
        i=vpow[u];
        if(nr>i){
            cout<<"0\n";
            continue;
        }
        while(i--&&nr>0&&u>0){
            if((1<<i)<=nr){
                u=vparent[u][i];
                nr-=(1<<i);
            }
        }
        cout<<u<<"\n";
    }

    return 0;
}