Pagini recente » Cod sursa (job #947109) | Cod sursa (job #60106) | Cod sursa (job #163522) | Cod sursa (job #1056307) | Cod sursa (job #1818030)
#include <cstdio>
#include <algorithm>
using namespace std;
int rmq[17][100005];
int lg2[100005];
int pow2[17];
int main() {
int i,j,n,q,limit,lf,rg;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &n, &q);
lg2[2] = 1;
for(i = 3;i <= n;i++){
lg2[i] = lg2[i>>1] + 1;
}
pow2[0] = 1;
for(i = 1;i <= lg2[n];i++){
pow2[i] = pow2[i-1]<<1;
}
for(i = 1;i <= n;i++){
scanf("%d", &rmq[0][i]);
}
for(j = 1;j <= lg2[n];j++){
limit = n - ((1<<j) - 1);
for(i = 1;i <= limit;i++){
rmq[j][i] = min(rmq[j-1][i], rmq[j-1][i + pow2[j-1]]);
}
}
for(i = 1;i <= q;i++){
scanf("%d %d", &lf, &rg);
limit = lg2[rg - lf + 1];
printf("%d\n", min(rmq[limit][lf], rmq[limit][rg - pow2[limit] + 1]));
}
return 0;
}