Pagini recente » Cod sursa (job #2985027) | Cod sursa (job #2041533) | Cod sursa (job #1706199) | Cod sursa (job #2526495) | Cod sursa (job #2788361)
#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[LMAX];
int main() {
int i, j, n, m, lgCur, cop, a, b, put2, k, 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;
}
cop = n;
lgCur = 0;
while( cop ) {
cop /= 2;
lgCur++;
}
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;
}