Pagini recente » Cod sursa (job #789278) | Cod sursa (job #710349) | Cod sursa (job #1116149) | Cod sursa (job #1103662) | Cod sursa (job #3286410)
#include <fstream>
#include <climits>
#define NMAX 100000
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m;
int aint[NMAX * 4 + 1];
void update(int st, int dr, int poz, int pozu, int val) {
if (pozu > dr || pozu < st) return;
if (st == dr) {
aint[poz] = val;
return;
}
update(st, (st + dr) / 2, 2 * poz, pozu, val);
update((st + dr) / 2 + 1, dr, 2 * poz + 1, pozu, val);
if (aint[2 * poz] < aint[2 * poz + 1]) aint[poz] = aint[2 * poz + 1];
else aint[poz] = aint[2 * poz];
}
int query(int st, int dr, int sti, int dri, int poz) {
if (dr < sti || st > dri) return INT_MAX;
if (st == dr) return aint[poz];
int mmin1 = query(st, (st + dr) / 2, sti, dri, 2 * poz);
int mmin2 = query((st + dr) / 2 + 1, dr, sti, dri, 2 * poz + 1);
if (mmin1 > mmin2) return mmin2;
else return mmin1;
}
int main() {
cin >> n >> m;
for (int val, i = 1; i <= n; ++i) {
cin >> val;
update(1, n, 1, i, val);
}
for (int st, dr, i = 1; i <= m; ++i) {
cin >> st >> dr;
cout << query(1, n, st, dr, 1) << '\n';
}
return 0;
}