Pagini recente » Cod sursa (job #2528813) | Cod sursa (job #2189808) | Cod sursa (job #233803) | Cod sursa (job #2620413) | Cod sursa (job #1408950)
#include <fstream>
#define INF 999999999
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int Arb[ 4 * 100000 + 50 ], limit_s, limit_d, pos, val;
int n, m, i;
int _Minim( int nod , int left , int right )
{
if ( right < limit_s || left > limit_d )
return INF;
if ( right <= limit_d && left >= limit_s )
return Arb[ nod ];
int middle = ( left + right ) / 2;
return min( _Minim( nod * 2 , left , middle ), _Minim( nod * 2 + 1 , middle + 1 , right ) );
}
void _Update( int nod , int left , int right )
{
if ( left == right )
{
Arb[ nod ] = val;
return;
}
int middle = ( left + right ) / 2;
if ( pos <= middle )
_Update( 2 * nod , left , middle );
else
_Update( 2 * nod + 1 , middle + 1 , right );
Arb[ nod ] = min( Arb [ nod * 2 ] , Arb [ nod * 2 + 1 ] );
}
int main()
{
fin>>n>>m;
for ( i=1 ; i<=n ; i++ )
{
pos=i;
fin>>val;
_Update( 1 , 1 , n );
}
for ( i=1 ; i<=m ; i++ )
{
fin>>limit_s>>limit_d;
fout<<_Minim( 1 , 1 , n )<<'\n';
}
return 0;
}