Cod sursa(job #1903052)

Utilizator nick12nicolae mihalache nick12 Data 4 martie 2017 22:47:17
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;


#define oo 10000000000
#define pp pair<int,int>
#define RRR ios_base::sync_with_stdio(false);cin.tie(0);
int ar[100000*2];
int v[1000000];

void update(int node,int s,int e,int idx,int v)
{
    if (s==e)
        ar[node] = v;
    else
    {
        int mid = (s+e)/2;
        if (idx <= mid)
            update(2*node,s,mid,idx,v);
        else update(2*node+1,mid+1,e,idx,v);
        ar[node] = min(ar[2*node],ar[2*node+1]);
    }
}
int mx = oo;
void q(int node,int s,int e,int r, int l)
{
    if (r <= s && l >= e)
        mx = min(mx,ar[node]);
   else{
    int mid = (s+e)/2;
    if (r <= mid)q(node*2,s,mid,r,l);
    if (l>mid)q(node*2+1,mid+1,e,r,l);
}
}
int main()
{
    RRR
    int n;
    int m;
    freopen("rmq.in","r",stdin);
     freopen("rmq.out","w",stdout);
    cin >> n >> m;
    for (int i=1;i<=n;i++)
    {
        int z;
        cin >> z;
        update(1,1,n,i,z);
    }
    for (int i=0;i<m;i++)
    {
        int a,b;
        cin >> a >> b;
        mx = oo;
         q(1,1,n,a,b);
         cout << mx << endl;
    }


    return 0;
}