Pagini recente » Cod sursa (job #2209516) | Cod sursa (job #2370698) | Cod sursa (job #2981978) | Cod sursa (job #517882) | Cod sursa (job #1110600)
#include <cstdio>
#define minim(a,b) (a<b)?(a):(b)
using namespace std;
int v[20][100005];
int n,m;
int log(int a) {
/*int s=0,f=18;
while (s < f) {
int mij = (s+f)/2;
if ((1<<mij) < a) f = mij-1;
else if ((1<<mij) == a) return mij;
else if ((1<<(mij+1)) >= a) s = mij+1;
else return mij;
}*/
int k;
for (k=0;(1<<k+1)<a;k++);
return k;
}
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&v[0][i]);
for (int i=1;i<=17;i++) {
for (int j=1;j<=n-(1<<i)+1;j++) {
v[i][j] = minim(v[i-1][j],v[i-1][j+(1<<(i-1))]);
}
}
for (int i=1;i<=m;i++) {
int a,b;
scanf("%d %d",&a,&b);
int k = log(b-a+1);
printf("%d\n",minim(v[k][a],v[k][b-(1<<k)+1]));
}
return 0;
}