Cod sursa(job #3297921)

Utilizator florin123457Aioanei Florin Adrian florin123457 Data 24 mai 2025 15:49:22
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream f ("stramosi.in");
ofstream g ("stramosi.out");

int parent_nodes[250000]; 
int up[250000][18]; 

int main() {
    int N, M;
    f >> N >> M;

    
    for (int i = 1; i <= N; ++i) {
        f >> parent_nodes[i];
    }
   
    for (int i = 0; i <= N; ++i) { 
        up[i][0] = parent_nodes[i];
    }  
    for (int j = 1; j < 17; ++j) {
        for (int i = 0; i <= N; ++i) { 
            up[i][j] = up[ up[i][j-1] ][j-1];
        }
    }
    
    for (int k_query = 0; k_query < M; ++k_query) {
        int Q_node;
        int P_steps;
        f >> Q_node >> P_steps;

        int current_ancestor_node = Q_node;

        for (int j = 17; j >= 0; --j) {
            if (current_ancestor_node == 0) {
                break; 
            }

            if ((P_steps >> j) & 1) {
                current_ancestor_node = up[current_ancestor_node][j];
            }
        }
        g << current_ancestor_node << "\n";
    }

    return 0;
}