Mai intai trebuie sa te autentifici.

Cod sursa(job #2539184)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 5 februarie 2020 18:49:42
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <iostream>
#define MAX 250000
#define LOG 20

using namespace std;

int dad[MAX + 5];
int dp[MAX + 5][LOG];

void precalculare(int n)
{
    for(int nod = 1; nod <= n; nod++)
        dp[nod][0] = dad[nod];

    for(int i = 1; i < LOG; i++)
        for(int nod = 1; nod <= n; nod++)
            dp[nod][i] = dp[dp[nod][i - 1]][i - 1];
}

int query(int q, int p)
{
    int sol = q;

    for(int i = LOG - 1; i >= 0; i--)
    {
        if(p >= (1 << i))
        {
            p -= (1 << i);

            sol = dp[sol][i];
        }
    }

    return sol;
}

int main()
{
    int n, m;

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

    fin >> n >> m;

    for(int i = 1; i <= n; i++)
        fin >> dad[i];

    precalculare(n);

    for(int i = 1; i <= m; i++)
    {
        int q, p;

        fin >> q >> p;

        fout << query(q, p) << '\n';
    }

    fin.close();
    fout.close();

    return 0;
}