Cod sursa(job #2752017)

Utilizator waren4Marius Radu waren4 Data 16 mai 2021 14:26:04
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
// Podaru Eduard-Cristian
#include <iostream>
#include <fstream>
#include <algorithm>
		
using namespace std;
	
 
ifstream f("rmq.in");
ofstream g("rmq.out");
	
 	
int n, sol, m; 
int Arb[400005];
	
 
	
void Update(int nod, int st, int dr, int poz, int val) {
	
    int mij = (st + dr) / 2;
	
    if(st == dr) {
        Arb[nod] = val;
        return;
	
    }
	
    if(poz <= mij) {
        Update(nod*2, st, mij, poz, val);
	
    }
	
    if(poz > mij) {
	   Update(nod*2 + 1, mij+1, dr, poz, val);
	
    }
	
    Arb[nod] = min(Arb[nod*2], Arb[nod*2 +1]);
	
}
	
 
	
void Query(int nod, int st, int dr, int x, int y) {
	
    int mij = (st+dr) / 2;
	
    if(st >= x && dr <= y) {
        sol = min(sol,Arb[nod]);
        return;
	
    }
	
    if(x <= mij) {
        Query(nod*2,st,mij,x,y);
	
    }
	
    if(y > mij) {
        Query(nod*2 + 1, mij+1, dr, x, y);
	
    }
	
}
	
 
	
int main() {
	
    int i, x, y;
	
    f>>n>>m;
	
    for(i = 1; i <= n; ++i) {
	
        f>>x;
	
        Update(1,1,n,i,x);
	
    }
	
    for(i = 1; i <= m; ++i) {
	
        f>>x>>y;
	
            sol = 100001;
	
            Query(1,1,n,x,y);
	
            g<<sol<<'\n';
	
    }
	
    return 0;
	
}