Cod sursa(job #2169565)

Utilizator aeromaniaXRadoi Iulian aeromaniaX Data 14 martie 2018 16:09:01
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;
//inline int cmmdc(int a,int b)
//{
//    int r;
//    while(b)
//    {
//        r=a%b;
//        a=b;
//        b=r;
//    }
//    return a;
//}
//
//inline int max(int a,int b)
//{
//    if(a>b)return a;
//    else return b;
//}

//////////////////////////
void date()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
}


//////////////////////////






int n,m,i,arb[200005],x,a,b;
int main()
{
    date();
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&arb[i+n]);

    for(int i=n-1;i>0;i--)
        arb[i]=min(arb[2*i],arb[2*i+1]);

     for(i=1; i<=m; i++)
    {
        scanf("%d%d",&a,&b);
        a+=n;
        b+=n;
        x=200000;
        while(a<=b)
        {
            x = min(x,min(arb[a],arb[b]));
            a = (a+1)/2;
            b = (b-1)/2;
        }
        printf("%d\n",x);
    }

    return 0;
}