Pagini recente » Cod sursa (job #2106417) | Cod sursa (job #2265623) | Cod sursa (job #3282797) | Cod sursa (job #1636827) | Cod sursa (job #2623580)
#include <stdio.h>
#include <math.h>
#define MAXLOG 17
#define MAXN 100000
#define min( a, b ) a < b ? a : b
int v[MAXN];
int minRange[MAXLOG][MAXN];
int main() {
FILE *fin = fopen( "rmq.in", "r" );
FILE *fout = fopen( "rmq.out", "w" );
int n, m, i, st, dr, lg, k, j;
fscanf( fin, "%d%d", &n, &m );
for ( i = 0; i < n; ++i ) {
fscanf( fin, "%d", &v[i] );
}
for ( i = 0; i < n; ++i ) {
minRange[0][i] = v[i];
}
lg = (int)log2( n );
for ( i = 1; i <= lg; ++i ) {
for ( j = 0; j + (1 << (i - 1)) < n; ++j ) {
minRange[i][j] = min( minRange[i - 1][j], minRange[i - 1][j + (1 << (i - 1))] );
}
}
for ( i = 0; i < m; ++i ) {
fscanf( fin, "%d%d", &st, &dr );
--st;
--dr;
k = (int)log2( dr - st + 1 );
fprintf( fout, "%d\n", min( minRange[k][st], minRange[k][dr - (1 << k) + 1] ) );
}
fclose( fin );
fclose( fout );
return 0;
}