Problem Statement

Planets Queries I

Implementation


const ll mx = 32, N = 2e5 + 1;
ll dp[N][mx];
ll n, q;
void solve() {
    cin >> n >> q;

    rep(i, n) cin >> dp[i][0], --dp[i][0];
    FOR(i, 1, mx - 1) {
        rep(j, n) {
            ll half_child = dp[j][i - 1];
            dp[j][i] = dp[half_child][i - 1];
        }
    }

    while (q--) {
        ll x, k;
        cin >> x >> k, --x;

        FORR(j, mx - 1, 0) {
            if ((1LL << j) & k) x = dp[x][j];
        }
        cout << x + 1 << "\n";
    }
}