Pagini recente » Cod sursa (job #1726733) | Cod sursa (job #2169230) | Cod sursa (job #1961215) | Cod sursa (job #1945488) | Cod sursa (job #303473)
Cod sursa(job #303473)
#include <stdio.h>
#define min(a,b) ((a<b)?a:b)
int lg[100005],a[18][100005];
int RMQ( int x, int y){
int L = lg[y-x+1];
return min(a[L][x],a[L][y-(1<<L)+1]);
}
int main(){
freopen("rmq.in","r",stdin); freopen("rmq.out","w",stdout);
int N,M,i,j,L,E,x,y;
scanf("%d %d",&N,&M);
for (i=1;i<=N;++i) scanf("%d",&a[0][i]);
//preproc
for (i=2;i<=N;++i)lg[i]=lg[i>>1]+1;
L = lg[N];
/////
for (j=1;j<=L;++j){
E = N - (1<<j) + 1;
for (i=1;i<=E;++i)
a[j][i] = min( a[j-1][i], a[j-1][i+(1<<(j-1))] );
}
/////
for (i=1;i<=M;++i){
scanf("%d %d",&x,&y);
printf("%d\n", RMQ(x,y) );
}
return 0;
}