Pagini recente » Cod sursa (job #842625) | Cod sursa (job #1670007) | Cod sursa (job #2786403) | Cod sursa (job #2077324) | Cod sursa (job #1641185)
/**
* Code by Patrick Sava
* "Spiru Haret" National College of Bucharest
**/
# include "fstream"
# include "cstring"
# include "vector"
# include "queue"
# include "bitset"
# include "algorithm"
# include "map"
# include "set"
# include "unordered_map"
# include "deque"
# include "string"
# include "iomanip"
# include "cmath"
# include "stack"
# include "cassert"
const char IN [ ] = "rmq.in" ;
const char OUT [ ] = "rmq.out" ;
using namespace std ;
# define pb push_back
# define mp make_pair
# define FORN( a , b , c ) for ( register int a = b ; a <= c ; ++ a )
# define FORNBACK( a , b , c ) for ( register int a = b ; a >= c ; -- a )
ifstream cin ( IN ) ;
ofstream cout ( OUT ) ;
const int MAX = 1e5 + 14 ;
const int LOG = 20 ;
int RMQ [ LOG ] [ MAX ] ;
int logg [ MAX ] ;
int main ( void )
{
int n , m ;
cin >> n >> m ;
FORN ( i , 1 , n ) {
cin >> RMQ [ 0 ] [ i ] ;
}
FORN ( i , 1 , n ){
logg [ i ] = logg [ i >> 1 ] + 1 ;
}
FORN ( j , 1 , logg [ n ] ) {
FORN ( i , 1 , n ) {
RMQ [ j ] [ i ] = min ( RMQ [ j - 1 ] [ i ] , RMQ [ j - 1 ] [ ( ( i + ( 1 << ( j - 1 ) ) ) <= n ) ? ( i + ( 1 << ( j - 1 ) ) ) : i ] ) ;
}
}
while ( m -- )
{
int a , b ;
cin >> a >> b ;
int diff = b - a ;
int ll = logg [ diff ] - 1 ;
cout << min ( RMQ [ ll ] [ a ] , RMQ [ ll ] [ b - ( 1 << ll ) + 1 ] ) << '\n' ;
}
return 0;
}