Cod sursa(job #1535476)

Utilizator BaweeLazar Vlad Bawee Data 24 noiembrie 2015 20:20:17
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;

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

int Poz,Val,start,finish,minn,n,m;
int a[4 * 100001];

void update(int nod, int left, int right)
{
    if(left == right)
    {
        a[nod] = Val;
        return;
    }
    int mij = (left + right) / 2;
    if(Poz <= mij) update(2 * nod,left,mij);
    else           update(2 * nod + 1,mij + 1,right);

    a[nod] = min(a[2 * nod],a[2 * nod + 1]);
}

void query(int nod, int left, int right)
{
    if(start <= left && right <= finish)
    {
        if(minn > a[nod])
            minn = a[nod];
        return;
    }
    int mij = (left + right) / 2;
    if(start <= mij) query(2 * nod,left,mij);
    if(mij < finish) query(2 * nod + 1,mij + 1,right);
}

int main()
{
    int x,y;

    f >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        f >> x;
        Poz = i;
        Val = x;
        update(1,1,n);
    }

    for(int i = 1; i <= m; i++)
    {
        f >> x >> y;
        minn = 1 << 30;
        start = x;
        finish = y;
        query(1,1,n);
        g << minn << "\n";
    }
    return 0;
}