Cod sursa(job #2294766)

Utilizator TheSeekerRobert Cristian Dobra TheSeeker Data 2 decembrie 2018 19:48:59
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;

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

const int M=100003;
int n,m,i,v[M],A[4*M],a,b,sol;

void build(int nod,int st,int dr){
    if (st==dr)
        A[nod]=v[st];
    else{
        int mid=(st+dr)/2;
        build(2*nod,st,mid);
        build(2*nod+1,mid+1,dr);
        A[nod]=min(A[2*nod],A[2*nod+1]);
    }
}

void qr(int nod,int st,int dr,int a,int b){
    if (st==dr)
        sol=min(sol,A[nod]);
    else{
        int mid=(st+dr)/2;
        if (a<=mid)
            qr(2*nod,st,mid,a,b);
        if (b>mid)
            qr(2*nod+1,mid+1,dr,a,b);
    }
}

int main(){
    fin>>n>>m;
    for (i=1;i<=n;i++)
        fin>>v[i];
    build(1,1,n);
    for (i=1;i<=m;i++){
        fin>>a>>b;
        sol=INT_MAX;
        qr(1,1,n,a,b);
        fout<<sol<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}