Pagini recente » Borderou de evaluare (job #460745) | Borderou de evaluare (job #1554955) | Borderou de evaluare (job #1825249) | Cod sursa (job #2341066) | Cod sursa (job #2169565)
#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;
}