Pagini recente » Cod sursa (job #1194590) | Cod sursa (job #2674649) | Cod sursa (job #72324) | Cod sursa (job #2004507) | Cod sursa (job #1216745)
#include <fstream>
#define rint register int
const char IN [ ] = "rmq.in" ;
const char OUT [ ] = "rmq.out" ;
const int LOGMAX = 20 ;
const int MAX = 1000014 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
int R [ LOGMAX ] [ MAX ] , log [ MAX ] ;
int main( )
{
int n , m ;
fin >> n >> m ;
for ( rint i = 1 ; i <= n ; ++ i ){
int x ;
fin >> x ;
R [ 0 ] [ i ] = x ;
}
log [ 1 ] = 0 ;
for ( rint i = 2 ; i <= n ; ++ i )
log [ i ] = log [ i >> 1 ] + 1 ;
for ( rint i = 1 ; ( 1 << i ) <= n ; ++ i ) {
int lim = n - ( 1 << i ) + 1 ;
for ( rint j = 1 ; j <= lim ; ++ j )
{
int l = 1 << ( i - 1 );
R [ i ] [ j ] = min ( R [ i - 1 ] [ j ] , R [ i - 1 ] [ j + l ] ) ;
}
}
while ( m -- )
{
int x , y ;
fin >> x >> y ;
int diff = y - x + 1 ;
int lg = log [ diff ] ;
int l = diff - (1 << lg) ;
fout << min ( R [ lg ] [ x ] , R [ lg ] [ x + l ] ) << '\n' ;
}
return 0;
}