Pagini recente » Cod sursa (job #166010) | Cod sursa (job #636626) | Cod sursa (job #1382745) | Infoarena Monthly 2014 - Runda 8, Solutii | Cod sursa (job #2818554)
#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--;
fprintf( fout, "%d\n", f(tabel[a - 1][p], tabel[b - 1 - p][p]) );
}
fclose( fin );
fclose( fout );
return 0;
}