Nu aveti permisiuni pentru a descarca fisierul grader_test3.in
Cod sursa(job #3286412)
Utilizator | Data | 14 martie 2025 10:20:26 | |
---|---|---|---|
Problema | Range minimum query | Scor | 30 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.04 kb |
#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);
aint[poz] = min(aint[2 * poz], aint[2 * poz + 1]);
}
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];
return min(query(st, (st + dr) / 2, sti, dri, 2 * poz), query((st + dr) / 2 + 1, dr, sti, dri, 2 * poz + 1));
}
int main() {
cin.tie(0);
cin.sync_with_stdio(0);
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;
}