Pagini recente » Cod sursa (job #232262) | Cod sursa (job #3216774) | Cod sursa (job #925616) | Cod sursa (job #994222) | Cod sursa (job #1439108)
#include <stdio.h>
#define MAXN 100005
#define MAXLOGN 18
#define MIN(a, b) (((a) < (b))?(a):(b))
using namespace std;
int n, m, v[MAXN], rmq[MAXLOGN][MAXN];
int l, r, log2[MAXN];
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int i, j, k;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++) {
scanf("%d ", &v[i]);
rmq[0][i] = v[i];
}
for(k = 1; (1 << k) <= n; k++) {
for(i = 1; i <= n; i++) {
rmq[k][i] = rmq[k - 1][i];
if(i + (1 << (k - 1)) <= n && rmq[k - 1][i + (1 << (k - 1))] < rmq[k][i])
rmq[k][i] = rmq[k - 1][i + (1 << (k - 1))];
}
}
for(i = 1, j = 1; i <= n; i++) {
if(i >= (1 << j)) ++j;
log2[i] = j - 1;
}
while(m--) {
scanf("%d %d\n", &l, &r);
int x = log2[r - l + 1];
printf("%d\n", MIN(rmq[x][l], rmq[x][r - (1 << x) + 1]));
}
return 0;
}