Pagini recente » Cod sursa (job #1749925) | Cod sursa (job #2028495)
#include<fstream>
using namespace std;
ifstream in ("stramosi.in" );
ofstream out("stramosi.out");
int a,b,n,m,aux[250001],p[23],dp[23][250001];
int solve( int nod, int k ){
if( k == 0 ){
return nod;
}
return solve( dp[aux[k]][nod], k - p[aux[k]] );
}
int main(){
in >> n >> m;
for( int i = 1; i <= n; i ++ ){
in>>dp[0][i];
}
for( int j = 1; j <= 21; j ++ ){
for( int i = 1; i <= n; i ++ ){
dp[i][j] = dp[i-1][ dp[i-1][j] ];
}
}
p[0] = 1;
for( int i = 1; i <= 21; i ++ ){
p[i] = p[i-1]*2;
}
for( int i = 2; i <= n; i ++ ){
aux[i] = aux[i/2]+1;
}
for( int k = 1; k <= m; k ++ ){
in >> a >> b;
out<<solve( a, b )<<"\n";
}
return 0;
}