Cod sursa(job #2866454)

Utilizator Maniu_DianaManiu Maria Diana Maniu_Diana Data 9 martie 2022 18:36:26
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 250005;

int n, m, Log;
int dp[nmax][20], tata[nmax];

void precalc()
{
    for(int i = 1; i <= n; i ++)
    {
        dp[i][0] = tata[i];
        for(int j = 1; j <= 18; j ++)
            dp[i][j] = dp[ dp[i][j - 1] ][j - 1];
    }
}

int get_ancestor(int nod, int nr)
{
    for(int i = 18; i >= 0; i --)
    {
        if(nr >= (1 << i))
        {
            nod = dp[nod][i];
            nr -= (1 << i);
        }
    }

    return nod;
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i ++)
        fin >> tata[i];
    precalc();

    int p, q;
    while(m--)
    {
        fin >> p >> q;
        fout << get_ancestor(p, q) << '\n';
    }
    return 0;
}