Cod sursa(job #2626599)

Utilizator andreea.sbobAndreea Surdu-Bob andreea.sbob Data 7 iunie 2020 01:01:04
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 100001

int aint[NMAX*3];
int n, m, maxim;

void actualizare(int nod, int st, int dr, int poz, int val)
{
    if (st == dr) {
        aint[nod] = val;
	} else {
		int mij = (st+dr)/2;

		if (poz <= mij)
            actualizare(nod*2, st, mij, poz, val);
        else
            actualizare(nod*2+1, mij+1, dr, poz, val);
		aint[nod] = min(aint[nod*2], aint[nod*2+1]);
	}
}

void interogare(int nod, int st, int dr, int a, int b) {
	if (a <= st && dr <= b) {
        maxim = min(maxim, aint[nod]);
    } else {
		int mij = (st+dr)/2;
		if (a <= mij)
            interogare(nod*2, st, mij, a, b);
		if (b > mij)
            interogare(nod*2+1, mij+1, dr, a, b);
    }
}

int main() {

    ifstream in("rmq.in");
    ofstream out("rmq.out");

	int n, m, x, y, k;
	in >> n >> m;

	for (int i = 1; i <= n; i++) {
        in >> x;
		actualizare(1, 1, n, i, x);
    }

	for (int i = 1; i <= m; i++) {
        in >> x >> y;

		maxim = INT_MAX;
		interogare(1, 1, n, x, y);
		out << maxim << '\n';
    }
	return 0;
}