Cod sursa(job #1932204)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 19 martie 2017 16:25:35
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#define INF 1000001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int a[100001];
int val,poz,start,stop;
void update(int nod, int p, int q)
{
    if(p==q)
    {
        a[nod]=val;
    }
    else
    {
        int m=(p+q)/2;
        if(poz<=m) update(2*nod,p,m);
        else update(2*nod+1,m+1,q);
        a[nod]=min(a[2*nod],a[2*nod+1]);
    }
}
int query(int nod, int p, int q)
{
    if(start<=p and stop>=q)
    {
        return a[nod];
    }
    else
    {
        int m=(p+q)/2;
        int m1=INF,m2=INF;
        if(start<=m) m1=query(2*nod,p,m);
        if(m<stop) m2=query(2*nod+1,m+1,q);
        return min(m1,m2);
    }
}
int main()
{int n,m,i;
f>>n>>m;
for(i=1;i<=n;i++)
{
    f>>val;
    poz=i;
    update(1,1,n);
}
for(i=1;i<=m;i++)
{
    f>>start>>stop;
    g<<query(1,1,n)<<'\n';
}

    return 0;
}