Pagini recente » Cod sursa (job #2885342) | Cod sursa (job #835792) | Cod sursa (job #1292929) | Cod sursa (job #2840979) | Cod sursa (job #1615699)
#include<cstdio>
int n,m,d[17][200001],x,y,put,doila,q,qq,el,rez;
int minim(int nr1,int nr2){
if(nr1<=nr2)
return nr1;
return nr2;
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=0;i<=16;i++)
for(int j=1;j<=200000;j++)
d[i][j]=200001;
for(int i=1;i<=n;i++){
scanf("%d",&el);
d[0][i]=el;
}
q=0;
put=1;
while(put*2<=n){
put*=2;
q++;
}
int doila=1;
int pn=n;
for(int i=1;i<=q;i++){
for(int j=1;j<=n;j++)
if(j+doila<=n)
d[i][j]=minim(d[i-1][j],d[i-1][j+doila]);
doila*=2;
pn=pn-doila;
}
for(int qq=1;qq<=m;qq++){
scanf("%d%d",&x,&y);
q=0;
put=1;
while(put*2<=(y-x)){
put*=2;
q++;
}
rez=minim(d[q][x],d[q][y-put+1]);
printf("%d\n",rez);
}
return 0;
}