Cod sursa(job #1938958)

Utilizator Garen456Paun Tudor Garen456 Data 25 martie 2017 12:54:17
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,a[300005],narb;

inline int query(int p,int x,int y,int st,int dr)
{
     if(x==st && y==dr) return a[p];
    int mij=(st+dr)/2;
    if(y<=mij)
        return query(2*p,x,y,st,mij);
    if(x>mij)
        return query(2*p+1,x,y,mij+1,dr);

    return min( query(2*p,x,mij,st,mij) , query (2*p+1,mij+1,y,mij+1,dr)  );

}

int main()
{   fin>>n>>m;
    narb=1;
    int i,x,y;
    while(narb<n) narb*=2;
    for(i=1;i<=n;++i)
        fin>>a[narb+i-1];
    for(i=narb-1;i>=1;--i)
        a[i]=min(a[i*2],a[i*2+1]);
    for(i=1;i<=m;++i)
    { fin>>x>>y;
        fout<<query(1,x,y,1,narb)<<"\n";
    }

    return 0;
}