Cod sursa(job #2669849)

Utilizator Tudor_PascaTudor Pasca Tudor_Pasca Data 8 noiembrie 2020 10:44:36
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, q;
int v[250100], log2[250100], tree[20][250100];

int ancestor(int nod, int cont)
{
    int x = nod;

    while(cont)
    {
        x = tree[log2[cont]][x];
        cont -= (1 << log2[cont]);
    }

    return x;
}

int main()
{
    in >> n >> q;

    for(int i = 1; i <= n; i++)
        in >> tree[0][i];

    log2[1] = 0;

    for(int i = 2; i <= n; i++)
        log2[i] = log2[i / 2] + 1;

    for(int p = 1; (1 << p) <= n; p++)
    {
        //cout << "POWER: " << p << '\n';

        for(int i = 1; i <= n; i++)
        {
            tree[p][i] = tree[p - 1][tree[p - 1][i]];
            //cout << i << ' ' << tree[p][i] << '\n';
        }

        //cout << "\n\n";
    }

    while(q--)
    {
        int x, y;
        in >> x >> y;

        out << ancestor(x, y) << '\n';
    }

    return 0;
}