Cod sursa(job #3209856)

Utilizator Iustin2812Ion Iustin Ciprian Iustin2812 Data 3 martie 2024 17:12:07
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

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

int n,m,tata[250001];
int str[250001][250001];

int rezolv(int k, int p, int d){
    int contor=1;
    
    for(int i=0;i<20;i++){
        if(contor+d>p)
            break;
        
        if(contor+d==p&&str[k][i])
            return str[k][i];
        
        else
            if(!str[k][i])
                return 0;

        contor*=2;
    }
    contor/=2;
    return rezolv(str[k][contor+d-1],p,contor+d);
}

void stramosi(int node,int i){
    if(!str[node][i-1])
        return;
    
    int dx=str[node][i-1];
    if(!str[dx][i-1])
        return;
    
    str[node][i]=str[dx][i-1];
    stramosi(node,i+1);
}

int main() {
    int a;
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>a;
        str[i][0]=a;
    }
    
    for(int i=1;i<=n;i++){
        stramosi(i,1);
    }
    int k,p;
    for(int i=1;i<=m;i++){
        fin>>k>>p;
        fout<<rezolv(k,p,0)<<endl;
    }
    /*for(int i=1;i<=n;i++){
        for(int j=0;str[i][j];j++)
            cout<<str[i][j]<<" ";
        cout<<endl;
        
    }*/
    
    return 0;
}