Cod sursa(job #3134311)

Utilizator Alex_Cristea72Cristea Alexandru Alex_Cristea72 Data 28 mai 2023 21:04:25
Problema Stramosi Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

int main() {
    ifstream f1("../stramosi.in");
    ofstream f2("../stramosi.out");

    int N, M;
    f1 >> N >> M;

    vector<int> stramosi(N);
    for (int i = 0; i < N; i++)
        f1 >> stramosi[i];

    int stramosi_m[25003][19] = {0};

    for (int i = 0; i < N; i++)
        stramosi_m[i][0] = stramosi[i];

    for (int j = 1; j < 18; j++) {
        for (int i = 0; i < N; i++) {
            if (stramosi_m[i][j - 1] != 0)
                stramosi_m[i][j] = stramosi_m[stramosi_m[i][j - 1] - 1][j - 1];
        }
    }

    for (int i = 0; i < M; i++) {
        int Q, P;
        f1 >> Q >> P;

        int curent = Q;
        int n_stramos = P;

        while (n_stramos > 0 && curent != 0) {
            int p = 0;
            while ((1 << p) <= n_stramos)
                p++;
            p--;

            curent = stramosi_m[curent - 1][p];
            n_stramos -= (1 << p);
        }

        f2 << curent << endl;
    }

    f1.close();
    f2.close();

    return 0;
}