Cod sursa(job #2351299)

Utilizator Victor_InczeVictor Incze Victor_Incze Data 22 februarie 2019 10:24:13
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define MAXN 100005

using namespace std;

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

int x, a, b, arb[4*MAXN], n, m;

int query(int nod, int st, int dr, int a, int b)
{
    if (a<=st && dr<=b)
        return arb[nod];
    int mij, left=2000000000, right=2000000000;
    mij=(st+dr)/2;
    if (a<=mij)
        left=query(2*nod,st,mij,a,b);
    if (b>mij)
        right=query(2*nod+1,mij+1,dr,a,b);
    return min(left,right);
}

void update(int nod, int st, int dr, int a, int b)
{
    if (st==dr && st==a)
    {
        arb[nod]=b;
        return;
    }
    int mij=(st+dr)/2;
    if (a<=mij)
        update(2*nod,st,mij,a,b);
    else
        update(2*nod+1,mij+1,dr,a,b);
    arb[nod]=min(arb[2*nod],arb[2*nod+1]);
}

int main()
{
    in >> n >> m;
    for (int i=1; i<=n; i++)
    {
        in >> x;
        update(1,1,n,i,x);
    }
    for (int i=1; i<=m; i++)
    {
        in >> a >> b;
        out << query(1,1,n,a,b) << '\n';
    }
    return 0;
}