Pagini recente » Cod sursa (job #131757) | Cod sursa (job #2631398) | Cod sursa (job #1895067) | Cod sursa (job #2685528) | Cod sursa (job #1426414)
#include <stdio.h>
#define min(a,b) ((a)<(b) ? (a):(b))
int n,m,i,j,x,y,aux,dif,rmq[17][100001],v[1000001];
int main(){
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&rmq[0][i]);
for (i=1;1<<i<=n;i++){
aux=1<<(i-1);
for (j=1;j+aux<=n;j++)
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+aux]);
}
for (i=2;i<=n;i++) v[i]=v[i/2]+1;
for (i=1;i<=m;i++){
scanf("%d%d",&x,&y);
dif=v[y-x+1]; aux=1<<dif;
printf("%d\n",min(rmq[dif][x],rmq[dif][y-aux+1]));
}
return 0;
}