Pagini recente » Cod sursa (job #292510) | Cod sursa (job #2206808) | Cod sursa (job #2106655) | Cod sursa (job #2117829) | Cod sursa (job #2538191)
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int NMAX = 100005;
long long rmq[20][NMAX];
int v[NMAX];
int kmax;
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i){
scanf("%d",&v[i]);
rmq[0][i]=v[i];
}
int k;
for(k=1 ;(1<<k) <=n ;++k){
for(int i=0 ;i+(1<<k)<=n ;++i)
rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+(1<<(k-1))]);
//rmq[k][i]=rmq[k-1][i]+rmq[k-1][i+(1<<(k-1))];
}
kmax=k;
int a,b;
for(;m;m--){
scanf("%d%d",&a,&b);
a--,b--; //cause of 0 indexing
// int sum=0;
// for(int k=kmax;k>=0;--k)
// if((1<<k)<=b-a+1){
// sum+=rmq[k][a];
// a+=(1<<k);
// }
int k=log2(b-a+1);
printf("%lld\n",min(rmq[k][a],rmq[k][b-(1<<k)+1]));
}
return 0;
}