Cod sursa(job #3297286)

Utilizator mateipiratulCocu Matei mateipiratul Data 22 mai 2025 13:12:50
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
// stramosi
#include <iostream>
#include <fstream>
#include <cmath>

int main() {
    std::ifstream f("stramosi.in");
    std::ofstream g("stramosi.out");
    int n, m, q, p, r, s[250001][19];
    f >> n >> m; // log2(25*10^4) ~ 18
    int log2n = log2(n) + 1;

    for (int i = 1; i <= n; ++i)
        f >> s[i][0];

    for (int i = 1; i <= n; ++i) // construirea dinamica
        for (int j = 1; j <= log2n; ++j) // a arborilor
                s[i][j] = s[s[i][j - 1]][j - 1];

    while(m--) {
        r = 0;
        f >> q >> p;

        while (p) {
            if (p % 2)
                q = s[q][r]; // actualizarea stramosului curent
            ++r;
            p >>= 1;
        } // descompunerea lui p in puteri ale lui 2

        g << q << '\n';
    }
    return 0;
}