Pagini recente » Cod sursa (job #2267350) | Cod sursa (job #396896) | Cod sursa (job #49392) | Cod sursa (job #2688851) | Cod sursa (job #2734921)
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
const int NMAX = 1e5;
const int LOGMAX = 16;
int rmq[NMAX + 1][LOGMAX + 1];
FILE *fin;
ofstream fout ( "rmq.out" );
static inline int min ( int a, int b ) {
return a < b? a: b;
}
int get () {
int nr = 0, ch;
while ( !isdigit ( ch = fgetc ( fin ) ) );
do {
nr = nr * 10 + ch - '0';
} while ( isdigit ( ch = fgetc ( fin ) ) );
return nr;
}
int main () {
int n, t, len, a, b;
fin = fopen ( "rmq.in", "r" );
n = get (); t = get ();
for ( int i = 1; i <= n; i++ )
rmq[i][0] = get ();
for ( int len = 1; ( 1 << len ) <= n; len++ )
for ( int i = 1; i <= n - ( 1 << len ) + 1; i++ )
rmq[i][len] = min ( rmq[i][len - 1],
rmq[i + ( 1 << ( len - 1 ) ) ][len - 1] );
while ( t-- ) {
a = get (); b = get ();
len = log2 ( b - a + 1 );
fout << min ( rmq[a][len], rmq[b - ( 1 << len ) + 1][len]) << '\n';
}
fclose ( fin );
return 0;
}