Pagini recente » Cod sursa (job #1134538) | Cod sursa (job #6239) | Cod sursa (job #161164) | Cod sursa (job #1501981) | Cod sursa (job #204461)
Cod sursa(job #204461)
#include<stdio.h>
#define N 100100
#define L 20
int a[N][L],n,m,v[N];
inline int minim(int x,int y){
return x<y ? x : y;
}
int doi(int x){
int p=1,nr=0;
while(p<=x){
p<<=1;
++nr;
}
return nr-1;
}
int rez(int x,int y){
int p=doi(y-x+1);
return minim(a[x][p],a[y-(1<<p)+1][p]);
}
void init(){
int i,j;
for(i=n ; i ; --i){
a[i][0]=v[i];
for(j=1 ; i+(1<<j)-1<=n ; ++j)
a[i][j]=minim(a[i][j-1],a[i+(1<<(j-1))][j-1]);
}
}
void calcul(){
int x,y;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
init();
while(m--){
scanf("%d%d",&x,&y);
printf("%d\n",rez(x,y));
}
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
calcul();
return 0;
}