Cod sursa(job #2028378)

Utilizator HumikoPostu Alexandru Humiko Data 27 septembrie 2017 20:04:06
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>

using namespace std;

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

int v[250001], dp[21][250001], log[250001], n, m;

int cautare (int a, int b)
{
    for ( int log2 = log[n]; log2 >= 0; --log2 )
    {
        if ( 1<<log2 <= b )
        {
            a = dp[log2][a];
            b -= 1<<log2;
        }
    }
    return a;
}

int main()
{
    fin>>n>>m;
    for ( int i = 1; i <= n; ++i )
        fin>>v[i];
    for ( int i = 1; i <= n; ++i )
        dp[0][i] = v[i];
    for ( int i = 1; i <= n; ++i )
        log[i] = log[i/2] + 1;
    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 (m--)
    {
        int q, p;
        fin>>q>>p;
        fout<<cautare(q, p)<<'\n';
    }

}