Pagini recente » Cod sursa (job #1358089) | Cod sursa (job #2549211) | Cod sursa (job #878483) | Cod sursa (job #1438342) | Cod sursa (job #2788738)
#include <fstream>
#include <algorithm>
#define NMAX 100002
#define LMAX 18
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[LMAX][NMAX];
int lg[NMAX];
int main() {
int i, j, n, m, lgCur, a, b, mn1, mn2;
cin>>n>>m;
for( i = 1; i <= n; i++ ) {
cin>>rmq[0][i];
}
for( i = 2; i <= n; i++ ) {
lg[i] = lg[i / 2] + 1;
}
lgCur = lg[n];
for( i = 1; i <= lgCur; i++ ) {
for( j = 1; j <= n - ( 1 << i ) + 1; j++ ) {
rmq[i][j] = min( rmq[i - 1][j], rmq[i - 1][j + ( 1 << ( i - 1 ) )] );
}
}
for( i = 1; i <= m; i++ ) {
cin>>a>>b;
mn1 = rmq[lg[b - a + 1]][a];
mn2 = rmq[lg[b - a + 1]][b - ( 1 << lg[b - a + 1]) + 1];
cout<<min( mn1, mn2 )<<"\n";
}
return 0;
}