Pagini recente » Cod sursa (job #899347) | Cod sursa (job #2343508) | Cod sursa (job #2686288) | Cod sursa (job #157291) | Cod sursa (job #1234884)
#include <cstdio>
#define n_max 100020
#include <algorithm>
#define log2n_max 18
using namespace std;
int n,ml;
int a[n_max];
int m[log2n_max][n_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]);
}
}
void solve(){
int x,y;
while(ml--){
scanf("%d%d",&x,&y);
l=lag[y-x+1];
tv=y-x+1-(1<<l);
printf("%ld\n",min(m[l][x],m[l][x+tv]));
}
}
int main(void){
freopen("rmq.in", "r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&ml);
read(n);
preprocess();
lg();
solve();
}