Pagini recente » Cod sursa (job #233212) | Cod sursa (job #3157465) | Cod sursa (job #328971) | Cod sursa (job #2127453) | Cod sursa (job #304120)
Cod sursa(job #304120)
#include<stdio.h>
#include<vector>
using namespace std;
#define nmax 100002
#define lmax 18
long long a[lmax][nmax],n,m,l[nmax],b[nmax];
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
long long i,j,l1;
scanf("%lld %lld",&n,&m);
for(i=1;i<=n;i++)
scanf("%lld",&b[i]);
l[1]=0;
for(i=2;i<=n;i++)
l[i]=l[i/2]+1;
for(i=1;i<=n;i++)
a[0][i]=b[i];
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n-(1<<i)+1;j++){
l1=1<<(i-1);
a[i][j]=min(a[i-1][j],a[i-1][j+l1]);
}
long long x,y,d,s;
for(i=1;i<=m;i++){
scanf("%lld %lld",&x,&y);
d=y-x+1;
l1=l[d];
s=d-(1<<l1);
printf("%lld\n",min(a[l1][x],a[l1][x+s]));
}
return 0;
}