Pagini recente » Cod sursa (job #2165436) | Cod sursa (job #777951) | Cod sursa (job #82464) | Cod sursa (job #2878064) | Cod sursa (job #268985)
Cod sursa(job #268985)
#include<stdio.h>
#define MAX 100002
#define logMAX 20
int n,m,S[MAX][logMAX],lg[MAX];
int main(){
FILE *f = fopen("rmq.in","r");
FILE *g = fopen("rmq.out","w");
fscanf(f,"%d%d",&n,&m);
int i,j,x,y,k,r;
for(i=1;i<=n;i++) fscanf(f,"%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];
fprintf(g,"%d\n",r);
}
return 0;
}