Pagini recente » Profil DianaElenaSandu | Cod sursa (job #1792066) | Cod sursa (job #604028) | Cod sursa (job #373390) | Cod sursa (job #1726654)
#include <cstdio>
#include <iostream>
using namespace std;
#define NMAX 100005
int rmq[ NMAX ][ 17 ];
int log[ NMAX ];
void computeLog( int n );
void computeRmq( int n );
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n, m, i, j, x, y, d, k;
scanf("%d%d",&n, &m);
for( i = 1; i <= n; ++i ) scanf("%d",&rmq[i][0]);
computeLog( n );
computeRmq( n );
while( m-- ){
scanf("%d%d",&x,&y);
d = log[ y - x + 1 ];
printf("%d\n",min( rmq[ x ][ d ], rmq[ y - ( 1 << d ) + 1 ][ d ] ) );
}
return 0;
}
void computeLog( int n ){
int i;
for( i = 2; i <= n; ++i )
log[ i ] = log[ i / 2 ] + 1;
}
void computeRmq( int n ){
int i, j;
for( j = 1; (1 << j ) <= n; ++j ){
for( i = 1; i + ( 1 << j ) - 1 <= n; ++i ){
rmq[ i ][ j ] = min( rmq[ i ][ j - 1 ], rmq[ i + ( 1 << ( j - 1 ) ) ][ j - 1] );
}
}
}