Cod sursa(job #3276811)

Utilizator devilexeHosu George-Bogdan devilexe Data 14 februarie 2025 19:26:49
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int MAXN = 250000, log_MAXN = 18;
int N, M;
int dad[MAXN][log_MAXN]; // dad[i][j] = al 2^j-lea stramosi al lui i (0 daca nu exista)

int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; ++i)
        fin >> dad[i][0];
    for(int k = 1; k < 18; ++k)
        for (int i = 1; i <= N; ++i)
            dad[i][k] = dad[dad[i][k - 1]][k - 1];
    int P, Q;
    while (M--)
    {
        fin >> Q >> P;
        int j = 0;
        while ((1 << j) <= P) ++j;
        int nod = dad[Q][--j];
        while (j--)
            if (P & (1 << j)) nod = dad[nod][j];
        fout << nod << '\n';
    }
}