Pagini recente » Cod sursa (job #2131032) | Cod sursa (job #2509607) | Cod sursa (job #2853950) | Cod sursa (job #2068220) | Cod sursa (job #794727)
Cod sursa(job #794727)
#include <stdio.h>
int min(int a,int b){return a<b?a:b;}
int a[100005],n,m1;
int m[100005][18];
int log2[100005];
void preprocess(){
log2[1]=0;for(int i=2;i<=n;i++) log2[i]=log2[i/2]+1;
for(int i=0;i<n;i++) m[i][0]=a[i];
for(int j=1;(1<<j)<=n;j++)
for(int i=0;i<n && i+(1<<j)-1<n;i++){
m[i][j]=min(m[i][j-1],m[i+1<<(j-1)][j-1]);
}
}
int rmq(int i,int j){
int k=log2[j-i+1];
return min(m[i][k],m[j-(1<<k)+1][k]);
}
int main(){
int x,y;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d",&n);
scanf("%d",&m1);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
preprocess();
bool first=true;
for(int i=0;i<m1;i++){scanf("%d",&x);scanf("%d",&y);
if(!first) printf("\n");
first=false;
printf("%d",rmq(x-1,y-1));
}
return 0;
}