Pagini recente » Cod sursa (job #2948154) | Cod sursa (job #1843095) | Cod sursa (job #266198) | Cod sursa (job #808989) | Cod sursa (job #2759555)
#include <iostream>
#include <fstream>
#define NMAX 100000 //o suta de mii
#define LOGMAX 16
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int N, M;
int v[NMAX + 1][LOGMAX + 1];
inline void build(){
for(int i = N; i >= 1; i--){
for(int j = 1; i + (1 << j) - 1 <= N; j++){
v[i][j] = min(v[i][j - 1], v[i + (1 << (j - 1)) ][j - 1]);
}
}
}
int putereDoiLowerbound(int x){
int lo = -1;
int hi = LOGMAX + 1;
while(hi - lo > 1){
int mid = lo + (hi - lo) / 2;
if( (1 << mid) <= x ){
lo = mid;
}
else {
hi = mid;
}
}
return lo;
}
int main()
{
fin >> N >> M;
for(int i = 1; i <= N; i++){
fin >> v[i][0];
}
build();
for(int q = 1; q <= M; q++){
int a, b;
fin >> a >> b;
int k = putereDoiLowerbound(b - a + 1);
fout << min(v[a][k], v[b - (1 << k) + 1][k]) << "\n";
}
return 0;
}