Pagini recente » Cod sursa (job #11917) | Cod sursa (job #44154) | Cod sursa (job #2039003) | Cod sursa (job #1823451) | Cod sursa (job #1954273)
#include <fstream>
using namespace std;
ofstream fout ("stramosi.out");
ifstream fin ("stramosi.in");
int n,m,i,j,poz,nivel,stramos,stop;
int rmq[ 20 ][ 250005 ],lg[ 250005 ];
int main()
{
fin>>n>>m;
for( i = 1 ; i <= n ; i++ )
fin>>rmq[ 0 ][ i ];
lg[ 0 ] = -1;
for( i = 2 ; i <= n ; i++ )
lg[ i ] = lg[ i / 2 ] + 1;
for( i = 1 ; i <= lg[ n ] ; i++ )
{
for( j = 1 ; j <= n ; j++ )
{
rmq[ i ][ j ] = rmq[ i - 1 ][ rmq[ i - 1 ][ j ] ];
}
}
for( i = 1 ; i <= m ; i++ )
{
fin>>poz>>stramos;
nivel = lg[ stramos ];
stop = 1;
do
{
poz = rmq[ nivel ][ poz ];
stramos = stramos - ( 1 << nivel );
nivel = lg[ stramos ];
if( poz == 0 )
{
fout<<0<<'\n';
stop = 0;
break;
}
} while( nivel != -1 );
if( stop )
fout<<poz<<'\n';
}
}