Cod sursa(job #1455451)

Utilizator ggokGeri Gokaj ggok Data 28 iunie 2015 00:34:30
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
using namespace std;
int N,arr[100001],sgt[100001],V,E,op,num1,num2,Q;
void buildsgt(int l,int r,int curr)
{
    if(l==r){
        sgt[curr]=arr[r];
        return;
    }
    int mid=l+(r-l)/2;
    buildsgt(l,mid,curr*2);
    buildsgt(mid+1,r,curr*2+1);
    sgt[curr]=min(sgt[curr*2],sgt[curr*2+1]);
}
int query(int l,int r,int curr,int x,int y)
{
    if(y<l || x>r )
    return INT_MAX;
    if(l>=x && r<=y)
    return sgt[curr];
    int mid=l+(r-l)/2;
    int sol=query(l,mid,curr*2,x,y);
        int sol2=query(mid+1,r,curr*2+1,x,y);
        return min(sol,sol2);
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    cin>>V>>Q;
for(int i=1;i<=V;i++)
    cin>>arr[i];
    //for(int i=1;i<=20;i++)
       // cout<<sgt[i];
buildsgt(1,V,1);
   // for(int i=1;i<=20;i++)
//cout<<sgt[i];
while(Q--)
{
    cin>>num1>>num2;
   cout<<query(1,V,1,num1,num2)<<"\n";
}
    return 0;
}