Cod sursa(job #2902661)

Utilizator Iordache_AnaIordache Ana-Georgiana Iordache_Ana Data 16 mai 2022 17:59:55
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int arbint[400005];
int query(int nod, int left, int right, int a, int b)
{
    if(left>=a && right<=b)
        return arbint[nod];
    int mid=(left+right)/2;
    int v1=100001, v2=100001;
    if(a<=mid)
        v1=query(nod*2, left, mid, a, b);
    if(b>mid)
        v2=query(nod*2+1, mid+1, right, a, b);
    return min(v1, v2);
}

void update(int nod, int left, int right, int poz, int val)
{
    if(left==right)
    {
        arbint[nod]=val;
        return;
    }
    int mid=(left+right)/2;
    if(poz<=mid)
        update(nod*2, left, mid, poz, val);
    else
        update(nod*2+1, mid+1, right, poz, val);
    arbint[nod]=min(arbint[2*nod], arbint[2*nod+1]);
}
int main()
{
    int n, m, nr1, nr2, x;
    fin>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        fin>>x;
        update(1, 1, n, i, x);
    }
    for (int i=0; i<m; ++i)
    {
        fin>>nr1>>nr2;
        fout<<query(1, 1, n, nr1, nr2)<<"\n";
    }
    return 0;

}