Pagini recente » Cod sursa (job #606091) | Cod sursa (job #1567212) | Cod sursa (job #2928914) | Cod sursa (job #2044971) | Cod sursa (job #268990)
Cod sursa(job #268990)
#include<stdio.h>
#define MAX 100002
#define logMAX 18
int n,m,S[MAX][logMAX],lg[MAX];
int main(){
freopen("rmq.in","rt",stdin);
freopen("rmq.out","wt",stdout);
scanf("%d%d",&n,&m);
int i,j,x,y,k,r;
for(i=1;i<=n;i++) scanf("%d",&S[i][0]);
for(j = 1 ; (1<<j) <=n; ++j){
for(i=1;i<=n;++i){
S[i][j] = S[i][j-1];
if(i+(1<<(j-1))<=n)
if(S[i + (1<<(j-1))][j-1] < S[i][j-1]) S[i][j] = S[i + (1<<(j-1))][j-1];
}
}
for(i=1;i<=100000;i++) lg[i] = lg[i/2]+1;
for(i=1;i<=m;i++){
scanf("%d%d",&x,&y);
k = lg[y - x + 1]-1;
r = S[x][k];
if(S[y - (1<<k)+1][k] < S[x][k]) r = S[y - (1<<k)+1][k];
printf("%d\n",r);
}
return 0;
}