Pagini recente » Cod sursa (job #2983534) | Cod sursa (job #1010794) | Cod sursa (job #2659375) | Cod sursa (job #2572006) | Cod sursa (job #1740508)
#include <bits/stdc++.h>
#define NMAX 100001
#define MAXLOG 17
#define minn(a, b) a < b ? a : b
using namespace std;
int N, M, x, y, range[NMAX][MAXLOG], values[NMAX];
void preprocess() {
for (int it = 0; it < N; ++it) {
range[it][0] = it;
}
for (int j = 1; 1 << j <= N; ++j) {
for (int i = 0; i + (1 << j) - 1 < N; ++i) {
if (values[range[i][j - 1]] < values[range[i + (1 << (j - 1))][j - 1]]) {
range[i][j] = range[i][j - 1];
} else {
range[i][j] = range[i + (1 << (j - 1))][j - 1];
}
}
}
}
int findMin(int a, int b) {
int k = (int) log2(b - a + 1);
return minn(values[range[a][k]], values[range[b - (1 << k) + 1][k]]);
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &N, &M);
for (int it = 0; it < N; ++it) {
scanf("%d", &values[it]);
}
preprocess();
for (int it = 0; it < M; ++it) {
scanf("%d%d", &x, &y);
printf("%d\n", findMin(x - 1, y - 1));
}
fclose(stdin);
fclose(stdout);
return 0;
}