Pagini recente » Cod sursa (job #242643) | Cod sursa (job #372448) | Cod sursa (job #1697764) | Cod sursa (job #2538840) | Cod sursa (job #1133686)
#include<stdio.h>
int v[100001];
int p2[100001];
int rmq[18][100001];
int minim(int a,int b){
if(a<=b) return a;
return b;
}
int main(){
int a,b,i,j,log,n,m;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
p2[1]=0;
for(i=2;i<=n;i++){
p2[i]=p2[i/2]+1;
}
for(i=1;i<=n;i++){
scanf("%d",&v[i]);
rmq[0][i]=v[i];
}
for(i=1;(1<<i)<=n;i++){
for(j=1;j<=n-(1<<i)+1;j++){
rmq[i][j]=minim(rmq[i-1][j],rmq[i-1][(j+(1<<(i-1)))]);
}
}
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
log=p2[b-a+1];
printf("%d\n",minim(rmq[log][a], rmq[log][b-(1<<log)+1]));
}
return 0;
}