Pagini recente » Cod sursa (job #2746330) | Cod sursa (job #1801885)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 100000;
const int LMAX = 16;
int v[NMAX + 5], rmq[LMAX + 5][NMAX + 5];;
int pow2_exp ( int a ) {
int p2, k = -1;
for ( p2 = 1 ; p2 < a ; p2 *= 2 )
++k;
return k;
}
int main() {
freopen ( "rmq.in", "r", stdin );
freopen ( "rmq.out", "w", stdout );
int n, m, x, y, l, poz;
scanf ( "%d%d", &n, &m );
for ( register int i = 1 ; i <= n ; ++i ) {
scanf ( "%d", &v[i] );
rmq[0][i] = v[i];
}
for ( register int i = 1 ; ( 1 << i ) <= n ; ++i ) {
for ( register int j = 1; j + ( 1 << i ) - 1 <= n ; ++j ){
l = 1 << ( i - 1 );
rmq[i][j] = min ( rmq[i - 1][j], rmq[i - 1][j + l] );
}
}
for ( register int i = 1 ; i <= m ; ++i ) {
scanf ( "%d%d", &x, &y );
l = pow2_exp ( y - x + 1 );
poz = y - x + 1 - ( 1 << l );
printf ( "%d\n", min ( rmq[l][x], rmq[l][x + poz] ) );
}
return 0;
}