Pagini recente » Cod sursa (job #1550969) | Cod sursa (job #2416852) | Cod sursa (job #25219) | Monitorul de evaluare | Cod sursa (job #584042)
Cod sursa(job #584042)
#include <cstdio>
#define Nmax 100000
#define LogN 20
using namespace std;
int N, M, x, y;
int v[LogN][Nmax];
inline int min(const int &x, const int &y) { return x < y ? x : y; }
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d\n", &N, &M);
for (int i = 0; i < N; ++i) scanf("%d\n", &v[0][i]);
for (int k = 1; (1 << k) - 1 < N; ++k) {
for (int i = 0; i < N; ++i) {
if (i + (1 << k) - 1 >= N) break;
v[k][i] = min(v[k-1][i], v[k-1][i + (1 << (k - 1))]);
}
}
while (M--) {
scanf("%d %d\n", &x, &y);
--x; --y;
for (int k = 0; 1; ++k) {
if (x + (1 << (k + 1)) - 1 > y) {
printf("%d\n", min(v[k][x], v[k][y - (1 << k) + 1]));
break;
}
}
}
return 0;
}