Pagini recente » Cod sursa (job #2077707) | Cod sursa (job #898752) | Cod sursa (job #2672192) | Cod sursa (job #2595360) | Cod sursa (job #744367)
Cod sursa(job #744367)
#include <cstdio>
#include <algorithm>
using namespace std;
long l2[100005];
long rmq[32][100005];
int main () {
long n,i,x,d,m,a,b,ceva,j;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld",&n,&m);
l2[1]=0;
for (i=1;i<=n;++i) {
scanf("%ld",&x);
rmq[0][i]=x;
if (i>1)
l2[i]=l2[(i>>1)]+1;
}
for (i=1;(1<<i)<=n;++i) {
d=(1<<(i-1));
for (j=1;j<=n-(1<<i)+1;++j)
rmq[i][j]=min (rmq[i-1][j],rmq[i-1][j+d]);
}
for (i=1;i<=m;i++) {
scanf("%ld%ld",&a,&b);
d=l2[b-a+1];
ceva=b-a+1-(1<<d);
if (ceva)
printf("%ld\n",min(rmq[d][a],rmq[d][a+ceva]));
else printf("%ld\n",rmq[d][a]);
}
return 0;
}