Pagini recente » Cod sursa (job #164636) | Cod sursa (job #53900) | Cod sursa (job #2859376) | Cod sursa (job #1630374) | Cod sursa (job #1346025)
#include <fstream>
#include <algorithm>
#include <vector>
#include <iostream>
#include <cstring>
#define NMAX 100005
#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[18][NMAX];
int N , M , lg[NMAX];
int main ( void ){
int i , j , left , right;
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 >> left >> right ;
int diff = left - right +1 ;
int Power = lg[diff];
out << get_min( RMQ[Power][right] , RMQ[Power][left-(1<<Power)+1]) << "\n";
}
return 0 ;
}