Pagini recente » Cod sursa (job #443458) | Cod sursa (job #48637) | Cod sursa (job #883349) | Cod sursa (job #596934) | Cod sursa (job #2001290)
#include<cstdio>
using namespace std;
const int nmax=1e5+5;
int v[nmax],logb2[nmax];
int rmq[nmax][17];
inline int min(int a,int b)
{
if(a>b)
return b;
return a;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,i,j,m;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d",&v[i]),rmq[i][0]=v[i];
logb2[1]=0;
for(i=2;i<=n;++i)
logb2[i]=logb2[i/2]+1;
for(j=1;(1<<j) <= n; ++j)
for(i=1; i + (1<<j) - 1 <= n ; ++i)
rmq[i][j]=min(rmq[i][j-1],rmq[i + (1<<(j-1))][j-1]);
int x,y,lg,add;
while(m--)
{
scanf("%d%d",&x,&y);
lg=logb2[y-x+1];
add=y-x+1-(1<<lg);
printf("%d\n",min(rmq[x][lg],rmq[x+add][lg]));
}
}