Pagini recente » Cod sursa (job #1300004) | Cod sursa (job #1464380) | Cod sursa (job #1960261) | Cod sursa (job #1403573) | Cod sursa (job #2817987)
#include <stdio.h>
#define NMAXX 100000
#define LOGMAXX 16
using namespace std;
int v[NMAXX], table[NMAXX][LOGMAXX + 1];
int min( int a, int b ) {
return a < b ? a : b;
}
void build( int n ) {
int i, j;
for ( i = 0; i < n; i++ )
table[i][0] = v[i];
for ( j = 1; j <= LOGMAXX; j++ ) {
for ( i = 0; i + (1 << j) - 1 < n; i++ ) {
table[i][j] = min( table[i][j - 1], table[i + (1 << (j - 1))][j - 1] );
}
}
}
int query( int left, int right ) {
int dist, log;
dist = right - left + 1;
log = 0;
while ( dist > 1 ) {
dist /= 2;
log++;
}
return min( table[left][log], table[right - (1 << log) + 1][log] );
}
int main()
{
FILE *fin, *fout;
int n, i, q, left, right;
fin = fopen( "rmq.in", "r" );
fout = fopen( "rmq.out", "w" );
fscanf( fin, "%d%d", &n, &q );
for ( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
build( n );
for ( i = 0; i < q; i++ ) {
fscanf( fin, "%d%d", &left, &right );
fprintf( fout, "%d\n", query( left - 1, right - 1 ));
}
fclose( fin );
fclose( fout );
return 0;
}