Cod sursa(job #3124520)

Utilizator GFA03Gavrila Florin-Alexandru GFA03 Data 29 aprilie 2023 11:13:25
Problema Stramosi Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
//
// Created by gfa on 4/28/23.
//

#include <bits/stdc++.h>

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

int d[250005][50];

int search(int x, int y){

    int h = y, node = x, temp;
    while(h > 0){
        temp = (int)log2(h) + 1;
        node = d[node][temp];
        if(node == 0)
            return 0;
        h -= std::pow(2, temp-1);
    }
    return node;
}

int main(){
    int n, k;
    fin >> n >> k;
    for(int i = 1; i <=n; ++i)
        fin >> d[i][1];
    for(int i = 1; i <= n; ++i) {
        for(int j = 2; std::pow(2, j-1) <= i; ++j) { 
            d[i][j] = d[d[i][(int)std::pow(2, j-2)]][(int)std::pow(2, j-2)];
            if(d[i][j] == 0)
                break;
        }
    }
    int x, y;
    for(int queries = 1; queries <= k; ++queries) {
        fin >> x >> y;
        fout << search(x, y) << '\n';
    }
}