Cod sursa(job #3037900)

Utilizator popgeorge2905Pop George popgeorge2905 Data 26 martie 2023 17:08:21
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
/* Pop George Ioan
Colegiul National David Prodan Cugir */
#include <iostream>
#include <fstream>
#include <cmath>
#define N 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, a[N];
int arb[4 * N];
void constr(int nod, int st, int dr) {
    if(st == dr) 
        arb[nod] = a[st];
    else {
        int mijl = (st + dr) / 2;
        constr(2 * nod, st, mijl);
        constr(2 * nod + 1, mijl + 1, dr);
        arb[nod] = min(arb[2 * nod], arb[2 * nod + 1]);
    }
}
int interogare(int nod, int st, int dr, int x, int y) {
    if(st >= x && dr <= y)
        return arb[nod];
    int mijl = (st + dr) / 2, val1 = 1e7, val2 = 1e7;
    if(x <= mijl)
        val1 = interogare(2 * nod, st, mijl, x, y);
    if(y > mijl)
        val2 = interogare(2 * nod + 1, mijl + 1, dr, x, y);
    return min(val1, val2);
}
int main() {
    f >> n >> m;
    for(int i = 1; i <= n; ++i)
        f >> a[i];
    constr(1, 1, n);
    for(int i = 1; i <= m; ++i) {
        int x, y;
        f >> x >> y;
        g << interogare(1, 1, n, x, y) << '\n';
    }
    return 0;
}