Pagini recente » Cod sursa (job #1710285) | Cod sursa (job #2279459) | Cod sursa (job #286504) | Cod sursa (job #11866) | Cod sursa (job #1889261)
#include <cstdio>
#include <algorithm>
using namespace std;
#define NMAX 100005
#define lgNMAX 18
int v[ lgNMAX ][ NMAX ];
int Log[ NMAX ];
int main () {
freopen( "rmq.in", "r", stdin );
freopen( "rmq.out", "w", stdout );
int n, m, i, j, x, y, r, t, st, dr, interval;
scanf( "%d%d",&n,&m );
for ( i = 1; i <= n; ++i ) scanf( "%d",&v[ 0 ][ i ] );
for ( i = 2; i <= NMAX; ++i ) Log[ i ] = Log[ i / 2 ] + 1;
for ( i = 1; i <= Log[ n ]; ++i ) {
for ( j = 1; j <= n - ( 1 << i ) + 1; ++j ) {
interval = ( 1 << ( i - 1 ) );
v[ i ][ j ] = min( v[ i - 1 ][ j ], v[ i - 1 ][ j + interval ] );
}
}
while ( m-- ) {
scanf( "%d%d",&st,&dr );
if ( st > dr ) swap( st, dr );
t = dr - st + 1;
t = Log[ t ];
printf( "%d\n", min( v[ t ][ st ], v[ t ][ dr - ( 1 << ( t - 1 ) ) ] ) );
}
return 0;
}