Pagini recente » Cod sursa (job #3133183) | Cod sursa (job #1851109) | Cod sursa (job #1224575) | Cod sursa (job #2821809) | Cod sursa (job #1895700)
#include <cstdio>
using namespace std;
int lg[100001],rmq[100001][20];
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,l;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&rmq[i][0]);
lg[1]=0;
for(i=2;i<=n;i++)
lg[i]=1+lg[i/2];
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 a,b;
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
l=lg[b-a+1];
printf("%d\n",min(rmq[a][l],rmq[b-(1<<l)+1][l]));
}
return 0;
}