Pagini recente » Cod sursa (job #2278358) | Cod sursa (job #438594) | Cod sursa (job #106644) | Cod sursa (job #1650901) | Cod sursa (job #303805)
Cod sursa(job #303805)
#include<stdio.h>
#include<vector>
using namespace std;
long long a[100][100000],n,m,l[100000],b[100000];
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][s+x]));
}
return 0;
}