Pagini recente » Cod sursa (job #1216207) | Cod sursa (job #2584808) | Cod sursa (job #3221877) | Cod sursa (job #2779314) | Cod sursa (job #2783618)
#include <fstream>
#define NMAX 100000
#define LOG2 17
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int v[NMAX + 1], rmq[LOG2][NMAX], vlog2[NMAX + 1];
int minim(int a, int b) {
return a < b ? a : b;
}
void prec_rmq(int n) {
int i, j;
for (i = 1; i <= n; i++)
rmq[0][i] = v[i];
for (i = 1; (1 << i) <= n; i++)
for (j = 1; j <= n; j++)
rmq[i][j] = minim(rmq[i - 1][j], rmq[i - 1][j + (1 << i - 1)]);
}
void prec_log(int n) {
int i;
vlog2[1] = 0;
for (i = 2; i <= n; i++)
vlog2[i] = vlog2[i / 2] + 1;
}
int query(int st, int dr) {
return minim(rmq[vlog2[dr - st + 1]][st], rmq[vlog2[dr - st + 1]][dr - (1 << vlog2[dr - st + 1]) + 1]);
}
int main() {
int n, m, i, a, b;
cin >> n >> m;
for (i = 1; i <= n; i++)
cin >> v[i];
prec_log(n);
prec_rmq(n);
while (m--) {
cin >> a >> b;
cout << query(a, b) << "\n";
}
return 0;
}