Pagini recente » Cod sursa (job #269511) | Cod sursa (job #2446717) | Cod sursa (job #2607197) | Cod sursa (job #1556395) | Cod sursa (job #2452250)
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int a[18][1000000];
int min( int a, int b ) {
if ( a > b )
return b;
else
return a;
}
int log( int x ) {
int c = 0;
while ( 1 << c <= x ) {
c ++;
}
c --;
return c;
}
int main() {
FILE *fin = fopen( "rmq.in", "r" ), *fout = fopen( "rmq.out", "w" );
int n, i, j, m, b, c, i2;
fscanf( fin, "%d%d", &n, &m );
for ( i = 0; i < n; i ++ ) {
fscanf( fin, "%d", &a[0][i] );
}
for ( i = 1; i < log( n ) + 1; i ++ ) {
for ( j = 0; j < n - ( 1 << i ) + 1; j ++ ) {
a[i][j] = min( a[i - 1][j], a[i - 1][j + ( 1 << ( i - 1 ) )] );
}
}
for ( i2 = 0; i2 < m; i2 ++ ) {
fscanf( fin, "%d%d", &b, &c );
b --;
c --;
i = log( c - b + 1 );
fprintf( fout, "%d\n", min( a[i][b], a[i][c - ( 1 << i )] ) );
}
fclose( fin );
fclose( fout );
return 0;
}