Cod sursa(job #3301721)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 29 iunie 2025 12:48:19
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fi("stramosi.in");
ofstream fo("stramosi.out");


const int logmax = 17;

int P[250001];
int Dp[18][250001];
vector<int> relevant[2];

int main() {
    int N, M;
    fi >> N >> M;
    for (int i = 1; i <= N; i++) {
        fi >> P[i];
        Dp[0][i] = P[i];
        if (P[i] != 0) {
            relevant[1].push_back(i);
        }
    }

    int cr = 1;
    for (int l = 1; l <= logmax; l++) {
        relevant[1 - cr].clear();
        for (auto node: relevant[cr]) {
            Dp[l][node] = Dp[l - 1][Dp[l - 1][node]];

            if (Dp[l][node] != 0) {
                relevant[1 - cr].push_back(node);
            }
        }

        cr = 1 - cr;
    }

    for (int i = 1; i <= M; i++) {
        int q, p;
        fi >> q >> p;

        int cr = q;
        for (int p2 = logmax; p2 >= 0; p2--) {
            if ((1 << p2) <= p) {
                p -= (1 << p2);
                cr = Dp[p2][cr];
            }
        }

        fo << cr << "\n";
    }
}