Pagini recente » Cod sursa (job #1497373) | Cod sursa (job #2272240) | Cod sursa (job #1806406) | Cod sursa (job #165660) | Cod sursa (job #1133682)
#include<stdio.h>
int v[100001];
int p2[100001];
int rmq[18][100001];
int log(int n){
p2[1] = 0;
for(int i = 2; i <= n; ++i)
p2[i] = p2[i >> 1] + 1;
}
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);
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;
}