Pagini recente » Cod sursa (job #480778) | Cod sursa (job #2678456) | Cod sursa (job #523885) | Cod sursa (job #2873221) | Cod sursa (job #729280)
Cod sursa(job #729280)
#include<cstdio>
using namespace std;
int i,j,n,m1,a,b,x[100002],mi[100002][20],k1[10002];
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);
scanf("%d",&n);
scanf("%d",&m1);
for(i=1;i<=n;i++)
scanf("%d",&x[i]);
for(i=1;i<=n;i++)
{
for(j=0;(1<<j)<=i;j++);
;
k1[i]=j-1;
}
for(i=n;i>=1;i--)
{
if(i==32)
i=33-1;
mi[i][0]=x[i];
for(j=1;j<=k1[n+1-i];j++)
mi[i][j]=min(mi[i][j-1],mi[i+(1<<(j-1))][j-1]);
}
for(i=1;i<=m1;i++)
{
scanf("%d",&a);
scanf("%d",&b);
printf("%d\n",min(mi[a][k1[b-a+1]],mi[b-(1<<(k1[b-a+1]))+1][k1[b-a+1]]));
}
return 0;
}