Cod sursa(job #2753686)

Utilizator StarkillerCalin Stafie Starkiller Data 23 mai 2021 23:52:42
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>
#define NMAX 250010

using namespace std;

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

int tata[NMAX][60], n, m, a, poz;
int search_ancestor(int a, int poz)
{
    int index = 0;
    while (poz)
    {
        if (poz % 2)
            a = tata[a][index];
        poz >>= 1;
        ++index;
    }
    return a;
}

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

    int lg2_din_n = int(log2(n));
    for (int i = 1 ; i <= lg2_din_n ; ++i)
        for (int j = 1 ; j <= n ; ++j)
            tata[j][i] = tata[tata[j][i - 1]][i - 1];

    for (int i = 1 ; i <= m ; ++i)
    {
        fin >> a >> poz;
        gout << search_ancestor(a, poz) << '\n';
    }

    return 0;
}