Pagini recente » Cod sursa (job #1187100) | Cod sursa (job #2854745) | Cod sursa (job #993007) | Cod sursa (job #1714956) | Cod sursa (job #1130007)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define NMAX 100005
#define PMAX 18
#define get_max(a,b) ((a)>(b)?(a):(b))
#define get_min(a,b) ((a)<(b)?(a):(b))
using namespace std;
ifstream in ( "rmq.in" );
ofstream out ( "rmq.out" );
int RMQ[PMAX][NMAX] , Lg[NMAX] , N , M ;
int main ( void )
{
int i , j , x , y , diff;
in >> N >> M ;
for ( i = 1 ; i <= N ; ++i )
in >> RMQ[0][i];
for ( i = 2 ; i <= N ; ++i )
Lg[i] = Lg[i/2]+1;
for ( i = 1 ; ( 1<<i ) <= N ; ++i )
for ( j = 1 ; j <= N - ( 1<<i) + 1 ;++j )
RMQ[i][j] = get_min ( RMQ[i-1][j] , RMQ[i-1][j + ( 1<<(i-1) ) ] );
for ( i = 1 ; i <= M ; ++i )
{
in >> x >> y;
diff = y - x + 1;
int power = Lg[diff];
out << get_min ( RMQ[power][x] , RMQ[power][y-(1<<power)+1] ) << "\n";
}
in.close();
out.close();
return 0 ;
}