Pagini recente » Cod sursa (job #2822630) | Cod sursa (job #2166178) | Cod sursa (job #1192836) | Cod sursa (job #366518) | Cod sursa (job #2818831)
#include <stdio.h>
#define MAXN 100000
#define LOGN 16
#define INF 1000000
inline int min( int a, int b ) {
return a < b ? a : b;
}
int f( int a, int b ) {
return min(a, b);
}
int tabel[MAXN][LOGN + 1];
int main() {
FILE *fin, *fout;
int n, m, i, p, a, b;
fin = fopen( "rmq.in", "r" );
fout = fopen( "rmq.out", "w" );
fscanf( fin, "%d%d", &n, &m );
for( i = 0; i < n; i++ )
fscanf( fin, "%d", &tabel[i][0] );
for( p = 1; p <= LOGN; p++ )
for( i = 0; i < n; i++ )
tabel[i][p] = f(tabel[i][p - 1], i + (1 << (p - 1)) < n ? tabel[i + (1 << (p - 1))][p - 1] : INF );
for( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d", &a, &b );
p = 0;
while( 1 << p <= b - a )
p++;
p--;
if( p == -1 )
p = 0;
fprintf( fout, "%d\n", f(tabel[a - 1][p], tabel[b - (1 << p)][p]) );
}
fclose( fin );
fclose( fout );
return 0;
}