Pagini recente » Cod sursa (job #989527) | Cod sursa (job #2780310) | Cod sursa (job #1583402) | Cod sursa (job #1632132) | Cod sursa (job #3282995)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
#define MAXN 100005
int a[MAXN];
int r[MAXN][17];
int E[MAXN+1];
void consMat(int n) {
E[1] = 0;
for (int i = 2; i <= n; i++) {
E[i] = E[i/2] + 1;
}
for (int i = 0; i < n; i++) {
r[i][0] = a[i];
}
for (int j = 1; (1 << j) <= n; j++) {
for (int i = 0; i + (1 << j) <= n; i++) {
r[i][j] = min(r[i][j - 1], r[i + (1 << (j - 1))][j - 1]);
}
}
}
int intr(int st, int dr) {
int j = E[dr - st + 1];
return min(r[st][j], r[dr - (1 << j) + 1][j]);
}
int main() {
int n, q;
in >> n >> q;
for (int i = 0; i < n; i++)
in >> a[i];
consMat(n);
while (q--) {
int st, dr;
in >> st >> dr;
st--;
dr--;
out << intr(st, dr) << endl;
}
return 0;
}