Cod sursa(job #3297654)

Utilizator gabyyy____23Gabriela Madalina Pirvulescu gabyyy____23 Data 23 mai 2025 12:14:27
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <vector>
using namespace std;

const int MAXN = 250001;
const int MAX_LOG = 20;

int N, M;
int parent[MAXN];
int stramos[MAX_LOG][MAXN];

void pow2_stramosi() {
    for (int nod = 1; nod <= N; ++nod) {
        stramos[0][nod] = parent[nod];
    }

    for (int p = 1; p < MAX_LOG; ++p) {
        for (int nod = 1; nod <= N; ++nod) {
            int mid = stramos[p - 1][nod];
            if (mid != 0) {
                stramos[p][nod] = stramos[p - 1][mid];
            } else {
                stramos[p][nod] = 0;
            }
        }
    }
}

int gaseste_stramos(int x, int k) {
    for (int p = 0; p < MAX_LOG; ++p) {
        if (k & (1 << p)) {
            x = stramos[p][x];
            if (x == 0)
                break;
        }
    }
    return x;
}

int main() {
    cin >> N >> M;

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

    pow2_stramosi();

    for (int i = 0; i < M; ++i) {
        int Q, P;
        cin >> Q >> P;
        cout << gaseste_stramos(Q, P) << '\n';
    }

    return 0;
}