Cod sursa(job #3330462)

Utilizator coco11coraline kalbfleisch coco11 Data 19 decembrie 2025 17:24:23
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;

const int LOG = 20;

int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    int N, M;
    cin >> N >> M;

    vector<int> parent(N + 1);
    for (int i = 1; i <= N; i++) {
        cin >> parent[i];
    }

    vector<vector<int>> up(N + 1, vector<int>(LOG, 0));
    for (int i = 1; i <= N; i++) {
        up[i][0] = parent[i];
    }

    for (int k = 1; k < LOG; k++) {
        for (int i = 1; i <= N; i++) {
            int mid = up[i][k - 1];
            if (mid != 0)
                up[i][k] = up[mid][k - 1];
            else
                up[i][k] = 0;
        }
    }

    while (M--) {
        int Q, P;
        cin >> Q >> P;
        int node = Q;
        for (int k = 0; k < LOG; k++) {
            if (P & (1 << k)) {
                node = up[node][k];
                if (node == 0) break;
            }
        }
        cout << node << "\n";
    }

    return 0;
}