Pagini recente » Cod sursa (job #717339) | Cod sursa (job #3200791) | Cod sursa (job #452018) | Cod sursa (job #2848242) | Cod sursa (job #3153326)
#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;
}