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