Cod sursa(job #1896749)

Utilizator ancabdBadiu Anca ancabd Data 28 februarie 2017 21:15:33
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m, v[250005], q, p, dad[20][250005];

void build_stramosi()
{
    for(int i = 1; i <= n; i++)
        dad[0][i] = v[i];

    for(int k = 1; k <= 18; k++)
        for(int i = 1; i <= n; i++)
            dad[k][i] = dad[k - 1][dad[k - 1][i]];
}
int stramos()
{
    int aux = q;
    for(int i = 0; (1 << i) <= p; i++)
        if(p & (1 << i))
            aux = dad[i][aux];
    return aux;
}
int main()
{
    fin >> n >> m;

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

    build_stramosi();

    for(int i = 1; i <= m; i++)
    {
        fin >> q >> p;
        fout << stramos() << '\n';
    }
    return 0;
}