Pagini recente » Cod sursa (job #642269) | Cod sursa (job #3144490) | Cod sursa (job #2404693) | Cod sursa (job #2716487) | Cod sursa (job #2740784)
#include <cstdio>
using namespace std;
int x, y, n, q, a[100005], lg[100005], rmq[31][100005];
inline int min(int x, int y){
return (x < y) ? x : y;
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &n, &q);
for(int i = 1; i <= n ; ++i)
scanf("%d", &a[i]);
for(int i = 1; i <= n ; ++i)
rmq[0][i] = a[i];
for(int j = 1; (1 << j) <= n ; ++j){
for(int i = 1; i <= n - (1 << j) + 1; ++i){
rmq[j][i] = min(rmq[j - 1][i], rmq[j - 1][i + (1 << (j - 1))]);
}
}
for(int i = 2; i <= n ; ++i)
lg[i] = lg[i / 2] + 1;
for(int i = 1; i <= q ; ++i){
scanf("%d%d", &x, &y);
int d = y - x + 1, l = lg[d];
int sh = d - (1 << l);
printf("%d\n", min(rmq[l][x], rmq[l][x + sh]));
}
return 0;
}