Cod sursa(job #3277121)

Utilizator BOGDANTSB22Stepanov Bogdan BOGDANTSB22 Data 15 februarie 2025 12:29:56
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 250005;
const int LOG = 20; // log2(MAXN)

int up[MAXN][LOG]; // up[i][j] = al 2^j-lea stramos al lui i

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

    int N, M;
    fin >> N >> M;

    // Citim stramosii directi
    for (int i = 1; i <= N; i++) {
        fin >> up[i][0];
    }

    // Preprocesare: construim matricea up
    for (int j = 1; j < LOG; j++) {
        for (int i = 1; i <= N; i++) {
            up[i][j] = up[up[i][j-1]][j-1];
        }
    }

    // Raspundem la intrebari
    while (M--) {
        int Q, P;
        fin >> Q >> P;

        // Parcurgem bitii lui P
        for (int j = LOG - 1; j >= 0; j--) {
            if (P >= (1 << j)) {
                Q = up[Q][j];
                P -= (1 << j);
            }
        }

        fout << Q << "\n";
    }

    fin.close();
    fout.close();
    return 0;
}