Cod sursa(job #2278876)

Utilizator papinub2Papa Valentin papinub2 Data 8 noiembrie 2018 17:42:18
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>

using namespace std;

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

int main()
{
    int n, T;
    in >> n >> T;

    vector<int> log(n + 1);

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

    vector<vector<int> > dp(log[n] + 1, vector<int>(n + 1));

    for (int i = 1; i <= n; i++)
    {
        int x;
        in >> x;
        dp[0][i] = x;
    }

    for (int i = 1; i <= log[n]; i++)
        for (int j = 1; j <= n; j++)
            dp[i][j] = dp[i - 1][dp[i - 1][j]];

    while (T--)
    {
        int nod, cnt;
        in >> nod >> cnt;

        for (int i = log[cnt]; i >= 0; i--)
            if ((1<<i) & cnt)
                nod = dp[i][nod];

        out << nod << '\n';
    }

    return 0;
}