Cod sursa(job #3297279)

Utilizator mateipiratulCocu Matei mateipiratul Data 22 mai 2025 13:05:07
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
// stramosi
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

int main() {
    std::ifstream f("stramosi.in");
    std::ofstream g("stramosi.out");
    int n, m;
    f >> n >> m;
    int log2n = log2(n) + 1;
    std::vector<std::vector<int>> s(n + 1, std::vector<int>(log2n + 1, 0));

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

    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= log2n; ++j)
            if(s[i][j - 1])
                s[i][j] = s[s[i][j - 1]][j - 1];

    while(m--) {
        int q, p, 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;
}