Pagini recente » Cod sursa (job #1378632) | Rating Andrei Pham (AndreiPham) | Cod sursa (job #17635) | Cod sursa (job #424697) | Cod sursa (job #268980)
Cod sursa(job #268980)
#include<stdio.h>
#define MAX 100002
#define logMAX 20
int n,m,S[logMAX][MAX],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) - 1 < 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];
}
}
lg[1]=0;
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;
}