Cod sursa(job #1899951)

Utilizator Emy1337Micu Emerson Emy1337 Data 3 martie 2017 01:04:12
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;

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

const int maxN = 2.5e5 + 5;
int n, m, q, p, v[maxN], dad[20][maxN];

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

    for(int pow = 1; pow <= 18; pow++)
        for(int i = 1; i <= n; i++)
            dad[pow][i] = dad[pow - 1][dad[pow - 1][i]];
}

int solve(int q, int p)
{
    for(int i = 0; (1 << i) <= p; i++)
        if(p & (1 << i))
            q = dad[i][q];

    return q;
}




int main()
{

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

    build_dynamic();

    while(m--)
    {
        fin >> q >> p;
        fout << solve(q, p) << '\n';
    }
    return 0;
}