Pagini recente » Cod sursa (job #431531) | Cod sursa (job #1836761) | Cod sursa (job #2430580) | Cod sursa (job #1867492) | Cod sursa (job #1143145)
#include<cstdio>
const int MAX_N=100000,LOG2_MAX_N=18;
int rmq[LOG2_MAX_N][MAX_N];
int log2[MAX_N];
int n,m;
void read(){
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&rmq[0][i]);
}
void setLog2(){
int i;
for(i=2;i<=n;i++)
log2[i]=log2[i/2]+1;
}
int min2(int x,int y){
if (x<y)
y=x;
return y;
}
void setRmq(){
int i,j;
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n-(1<<i)+1;j++)
rmq[i][j] = min2(rmq[i-1][j],rmq[i-1][(j+(1<<(i-1)))]);
}
void init(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
read();
setLog2();
setRmq();
}
int main(){
int x,y;
init();
while(m>0){
m--;
scanf("%d%d",&x,&y);
printf("%d\n",min2(rmq[log2[y-x+1]][x],rmq[log2[y-x+1]][y-(1<<(log2[y-x+1]))+1]));
}
return 0;
}