Cod sursa(job #2733200)

Utilizator pctirziuTirziu Petre pctirziu Data 30 martie 2021 09:13:00
Problema Range minimum query Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int minn;
int aint[500005];
void update(int node, int st, int dr, int poz, int val)
{
    if(st == dr){
        aint[node] = val;
        return ;
    }
    int med = (st + dr) / 2;
    if(poz <= med)
        update(2 * node, st, med, poz, val);
    else
        update(2 * node + 1, med + 1, dr, poz, val);
    aint[node] = min(aint[2 * node], aint[node * 2 + 1]);
}
void rmq(int node, int st, int dr, int start, int fin)
{
    if(start <= st and dr <= fin){
        minn = min(minn, aint[node]);
        return ;
    }
    int med = (st + dr) / 2;
    if(start <= med)
        rmq(2 * node, st, med, start, fin);
    if(med < fin)
        rmq(2 * node + 1, med + 1, dr, start, fin);
}
int main()
{
    int i, n, a, t, b, c;
    cin >> n >> t;
    for(i = 1; i <= n; i++){
        cin >> a;
        update(1, 1, n, i, a);
    }
    for(i = 1; i <= t; i++){
        minn = 1000000;
        cin >> b >> c;
        rmq(1, 1, n, b, c);
        cout << minn << "\n";
    }
    return 0;
}