Pagini recente » Cod sursa (job #53225) | Cod sursa (job #3223779) | Cod sursa (job #2306684) | Cod sursa (job #767076) | Cod sursa (job #2647831)
#include <cstdio>
using namespace std;
int min(int x, int y) {
return x<=y? x:y;
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out" ,"w", stdout);
int n, m, y, x, logn, r, l;
scanf("%d%d", &n, &m);
int logs[n+1];
logs[0] = logs[1] = 0;
for(int i=2; i<=n; ++i)
logs[i] = logs[i/2] + 1;
int arb[logs[n] + 3][n+2];
for(int i=1; (1<<i) <= n; ++i)
for(int j=1; j<=n - (1<<i) + 1; ++j)
arb[i][j] = 0;
for(int i=1; i<=n; ++i) {
scanf("%d", &x);
arb[0][i] = x;
}
for(int i=1; (1<<i) <= n; ++i)
for(int j=1; j<=n - (1<<i) + 1; ++j) {
l = 1 << (i-1);
arb[i][j] = min(arb[i-1][j], arb[i-1][j+l]);
}
for(int i=0; i<m ;++i) {
scanf("%d%d", &x, &y);
l = logs[y-x + 1];
r = y - x + 1 - (1<<l);
printf("%d\n", min(arb[l][x], arb[l][x+r]));
}
return 0;
}