Pagini recente » Cod sursa (job #1491635) | Cod sursa (job #725287) | Cod sursa (job #1720860) | Cod sursa (job #1760821) | Cod sursa (job #809813)
Cod sursa(job #809813)
#include <cstdio>
#include <algorithm>
using namespace std;
inline int next_int() {
int d;
scanf("%d", &d);
return d;
}
int H = 1;
int ST[1 << 20];
int get(int root, int left, int right, int a, int b) {
if (left == a && b == right) {
return ST[root];
}
int mid = left + right >> 1;
if (b <= mid) {
return get(root << 1, left, mid, a, b);
}
if (mid <= a) {
return get(root << 1 | 1, mid, right, a, b);
}
return min(get(root << 1, left, mid, a, mid), get(root << 1 | 1, mid, right, mid, b));
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int N = next_int();
int M = next_int();
while ((1 << H) < N) {
H++;
}
for (int i = 0; i < N; i++) {
ST[i + (1 << H)] = next_int();
}
for (int i = (1 << H) - 1; i; i--) {
ST[i] = min(ST[i << 1], ST[i << 1 | 1]);
}
for (int i = 0; i < M; i++) {
int a = next_int() - 1;
int b = next_int();
printf("%d\n", get(1, 0, 1 << H, a, b));
}
return 0;
}