Pagini recente » Cod sursa (job #1139895) | Cod sursa (job #19015) | Cod sursa (job #929058) | Cod sursa (job #1552670) | Cod sursa (job #1386819)
#include <fstream>
#include <algorithm>
#define IN "rmq.in"
#define OUT "rmq.out"
const int MAXL = 25 ;
const int MAXN = 100014 ;
using namespace std;
long long dp [ MAXL ] [ MAXN ] ;
long long put [ MAXN ] ;
long long v [ MAXN ] ;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
int main()
{
int n , m ;
fin >> n >> m ;
for ( register int i = 1 ; i <= n ; ++ i )
fin >> v [ i ] ;
put [ 1 ] = 0 ;
for ( register int i = 2 ; i <= n ; ++ i )
put [ i ] = put [ i / 2 ] + 1 ;
for ( register int i = 1 ; i <= n ; ++ i )
dp [ 0 ] [ i ] = v [ i ] ;
for ( register int i = 1 ; ( 1 << i ) <= n ; ++ i )
for ( register int j = 1 ; j <= n - ( 1 << i - 1 ) + 1 ; ++ j ){
long long l = ( 1 << ( i - 1 ) ) ;
dp [ i ] [ j ] = min ( dp [ i - 1 ] [ j ] , dp [ i - 1 ] [ j + l ] ) ;
}
for ( ; m ; -- m ) {
long long x , y ;
fin >> x >> y ;
int p = put [ y - x + 1 ] ;
int right = ( y - x + 1 ) - ( 1 << p ) ;
fout << min ( dp [ p ] [ x ] , dp [ p ] [ x + right ] ) << '\n' ;
}
return 0;
}