Cod sursa(job #3153326)

Utilizator xDemonstyMatei Haba Ionut xDemonsty Data 29 septembrie 2023 10:16:47
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
long long up [300005 ];
long long n, m ;
long long binary_lift [ 300005] [ 25 ] ;

int log (long long x )
{
    long long val = 0;
    while ( 1 << ( val + 1) <= x )
        val ++ ;
    return val ;

}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m ;

    for ( int i = 1; i <= n ; i ++ )
    {
        cin >> up [ i ] ;

    }


    for ( int i = 1; i <= n ; i ++ )
    {
        binary_lift [ i ] [ 0 ] = up [ i ] ;
    }

    for ( int i = 1 ; i <= 19 ; i++ )
    {
        for ( int j = 1; j <= n ; j ++ )
        {
            binary_lift [ j ] [ i ] = binary_lift[binary_lift[j][i-1]][i-1];
        }
    }

    for (int i = 1; i <= m ; i ++ )
    {
        long long nod , k ;
        cin >> nod >> k ;


        while ( k != 0)
        {
            long long d = log ( k ) ;



            nod = binary_lift [ nod ] [ d ] ;

            k -= ( 1 << d ) ;

        }

        cout << nod << '\n';
    }



    return 0;
}