Cod sursa(job #2596668)

Utilizator sichetpaulSichet Paul sichetpaul Data 10 aprilie 2020 10:51:58
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <bits/stdc++.h>
#define Nmax 250005
#define LG 20
using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");

int N, Q, L, root;
int anc[Nmax][LG];

int solve(int x, int y) {
    for (int i = L; i >= 0; --i)
        if ((1 << i) & y) x = anc[x][i];
    return x;
}
int main()
{
    f >> N >> Q;
    L = ceil(log2(N));
    for (int i = 1; i <= N; ++i)
        f >> anc[i][0];

    for (int j = 1; j <= L; ++j)
    for (int i = 1; i <= N; ++i) {
        int mid = anc[i][j - 1];
        anc[i][j] = anc[mid][j - 1];
    }

    while (Q--) {
        int x, y;
        f >> x >> y;
        g << solve(x, y) << '\n';
    }

    return 0;
}