Pagini recente » Cod sursa (job #2980067) | Cod sursa (job #76807) | Cod sursa (job #2722228) | Cod sursa (job #1504775) | Cod sursa (job #1234878)
#include <cstdio>
#define n_max 100020
#include <algorithm>
#define mv 1000000
#define log2n_max 17
#include <cmath>
using namespace std;
int n,ml;
int a[n_max],mxm;
int m[n_max][log2n_max];
long int l,tv;
//long int lag[n_max];
void read(int n){
int i=1;
while(i<=n)
scanf("%d",&a[i++]);
}
/*
void lg(){
lag[1]=0;
for(int i=2;i<=n;i++)
lag[i]=lag[i/2]+1;
}
*/
void preprocess(){
int i,j;
for(i=1;i<=n; ++i)
m[0][i]=a[i];
for(i=1;(1<<i)<=n;++i)
for(j=1;j<=n-(1<<i)+1;j++){
l=(1<<(i-1));
m[i][j]=min(m[i-1][j],m[i-1][j+l]);
}
}
int main(void){
freopen("rmq.in", "r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&ml);
read(n);
preprocess();
//lg();
int x,y;
while(ml--){
scanf("%d%d",&x,&y);
l=log2(y-x+1);
//l=lag[y-x+1];
tv=y-x+1-(1<<l);
printf("%ld\n",min(m[l][x],m[l][x+tv]));
}
}