Cod sursa(job #1647787)

Utilizator duesakBourceanu Cristian duesak Data 10 martie 2016 22:06:25
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int v[400100],n,m,minim;
void introd(int nod,int st, int dr, int poz, int val){
    if(st==poz&&dr==poz){
        v[nod]=val;
        return;
    }
    int div=(st+dr)/2;
    if(poz<=div)introd(2*nod,st,div,poz,val);
    else introd(2*nod+1,div+1,dr,poz,val);
    v[nod]=min(v[2*nod],v[2*nod+1]);
}
void query(int nod, int st, int dr, int a, int b){
    if(a<=st&&dr<=b){
        if(minim>v[nod])minim=v[nod];
        return;
    }
    int div=(st+dr)/2;
    if(a<=div)query(2*nod,st,div,a,b);
    if(div<b)query(2*nod+1,div+1,dr,a,b);
}
int main(){
    fin>>n>>m;
    int a,b;
    for(int i=1;i<=n;i++){
        fin>>a;
        introd(1,1,n,i,a);
    }
    for(int i=1;i<=m;i++){
        fin>>a>>b;
        minim=1100001;
        query(1,1,n,a,b);
        fout<<minim<<'\n';
    }
    return 0;
}