Pagini recente » Cod sursa (job #266112) | Cod sursa (job #2757538) | Cod sursa (job #664808) | Cod sursa (job #2720451) | Cod sursa (job #2480525)
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 10;
int r[18][5 + N];
int log[5 + N];
int v[5 + N];
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, m, i, j;
scanf("%d%d", &n, &m);
log[1] = 0;
for(i = 2; i <= n; i++) log[i] = 1 + log[i >> 1];
for(i = 1; i <= n; i++) scanf("%d", &v[i]);
for(i = 1; i <= n; i++) r[0][i] = v[i];
for(i = 1; (1 << i) <= n; i++){
for(j = 1; j + (1 << i) <= n + 1; j++){
r[i][j] = min(r[i - 1][j], r[i - 1][j + (1 << (i - 1))]);
//printf("%d ", r[i][j]);
}
//printf("\n");
}
for(i = 1; i <= m; i++){
int p, q, i0;
scanf("%d%d", &p, &q);
i0 = log[q - p + 1];
printf("%d\n", min(r[i0][p], r[i0][q - (1 << i0) + 1]));
}
return 0;
}