Pagini recente » Cod sursa (job #2853718) | Cod sursa (job #237239) | Cod sursa (job #23047) | Cod sursa (job #1055213) | Cod sursa (job #1043057)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAX_N 100000
#define MAX_LOG 17
int rmq[MAX_LOG][MAX_N];
int log2[MAX_N];
void read( FILE *fin, int &n, int &m ) {
fscanf( fin, "%d%d", &n, &m );
for ( int i = 0; i < n; ++i )
fscanf( fin, "%d", &rmq[0][i] );
}
void gen_rmq( int n ) {
for ( int len = 1; ( 1 << len ) < n; ++len )
for ( int i = 0; i < n; ++i ) {
rmq[len][i] = rmq[len - 1][i];
int mid = 1 << ( len - 1 );
if ( i + mid < n )
rmq[len][i] = min( rmq[len][i], rmq[len - 1][i + mid] );
}
}
void pregen_log2( int n ) {
log2[1] = 0;
for ( int i = 2; i < n; ++i )
log2[i] = log2[i >> 1] + 1;
}
int main() {
FILE *fin, *fout;
fin = fopen( "rmq.in", "r" );
int n, m;
read( fin, n, m );
gen_rmq( n );
pregen_log2( n );
fout = fopen( "rmq.out", "w" );
while ( m ) {
int left, right;
fscanf( fin, "%d%d", &left, &right );
int len = log2[right - left + 1];
fprintf( fout, "%d\n", min( rmq[len][left], rmq[len][right - ( 1 << len )] ) );
--m;
}
fclose( fin );
fclose( fout );
}