Pagini recente » Diferente pentru problema/blis intre reviziile 5 si 4 | Cod sursa (job #2015861) | Cod sursa (job #2241783) | Cod sursa (job #1291603) | Cod sursa (job #1605813)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int arr[100005], rmq[20][100005], arr_lng, query_nr, l, r;
inline int solve(int l, int r);
void rmq_init();
void read() {
cin >> arr_lng >> query_nr;
for(int i = 1; i <= arr_lng; ++i) {
cin >> arr[i];
}
rmq_init();
for(int i = 1; i <= query_nr; ++i) {
cin >> l >> r;
cout << solve(l, r) << '\n';
}
}
void rmq_init() {
for(int i = 1; i <= arr_lng; ++i) {
rmq[0][i] = arr[i];
}
for(int i = 1; (1 << i) <= arr_lng; ++i) {
for(int j = 1; j + (1 << i) - 1 <= arr_lng; ++j) {
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1) ) ]);
}
}
}
inline int solve(int l, int r) {
int line, length;
length = r - l + 1;
line = log2(length);
return min(rmq[line][l], rmq[line][l + length - (1 << line) ] );
}
int main() {
read();
return 0;
}