Cod sursa(job #2559018)

Utilizator TzigCurta Tudor Tzig Data 26 februarie 2020 22:04:18
Problema Range minimum query Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

using namespace std;

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

const int NMAX = 100005;
const int INF = (int)1e18;

int N,M;
int St[4*NMAX],Dr[4*NMAX],Minim[4*NMAX];

void Build(int nod,int st,int dr)
{
    St[nod]=st;
    Dr[nod]=dr;
    if(st==dr){
        f>>Minim[nod];
        return;
    }
    int mij=(st+dr)/2;
    Build(2*nod,st,mij);
    Build(2*nod+1,mij+1,dr);
    Minim[nod]=min(Minim[2*nod],Minim[2*nod+1]);
}

int Cauta_Minim(int nod,int st,int dr)
{
    if(St[nod]>dr || Dr[nod]<st){
        return INF;
    }
    if(st<=St[nod] && Dr[nod]<=dr){
        return Minim[nod];
    }
    int r1=Cauta_Minim(2*nod,st,dr);
    int r2=Cauta_Minim(2*nod+1,st,dr);
    return min(r1,r2);
}

int main()
{
    f>>N>>M;
    Build(1,1,N);
    while(M){
        int a,b;
        f>>a>>b;
        g<<Cauta_Minim(1,a,b)<<'\n';
        M--;
    }
    f.close();
    g.close();
    return 0;
}