Nu aveti permisiuni pentru a descarca fisierul grader_test3.in

Cod sursa(job #3286412)

Utilizator mihaihvhTuburlui Mihai mihaihvh 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;
}