Cod sursa(job #3230335)

Utilizator DenisMiricaDenis Mirica DenisMirica Data 20 mai 2024 16:46:53
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

    int n, t;
    fin >> n >> t;

    int max_log = 0;
    for (int temp = n; temp > 1; temp /= 2)
        max_log++;

    vector<vector<int>> ancestor(max_log + 1, vector<int>(n + 1));

    for (int i = 1; i <= n; ++i)
        fin >> ancestor[0][i];

    for (int i = 1; i <= max_log; ++i)
        for (int j = 1; j <= n; ++j)
            ancestor[i][j] = ancestor[i - 1][ancestor[i - 1][j]];

    for (int query = 0; query < t; ++query) {
        int node, k;
        fin >> node >> k;
        int level = 0;
        while (k > 0) {
            if (k % 2 == 1)
                node = ancestor[level][node];
            level++;
            k /= 2;
        }
        fout << node << endl;
    }

    fin.close();
    fout.close();

    return 0;
}