Pagini recente » Cod sursa (job #302417) | Cod sursa (job #2256104) | Cod sursa (job #83029) | Cod sursa (job #293529) | Cod sursa (job #1644472)
// D[i][j] = minimul incepand cu pozitia j a primelor 2^i elemente
# include <cstdio>
# include <iostream>
# include <cstring>
# include <algorithm>
# include <cmath>
using namespace std;
FILE *fin = fopen("rmq.in", "rt");
FILE *fout = fopen("rmq.out", "wt");
const int MAXN = 100005;
const int LOGN = 17;
int v[MAXN];
int D[LOGN][MAXN];
int n, m, a, b;
int minn;
int i, j, k;
int main() {
fscanf(fin, "%d%d", &n, &m);
for (i=1; i<=n; ++i) {
fscanf(fin, "%d", &v[i]);
D[0][i] = v[i];
}
int logn = log(n) + 1;
for (i=1; i<=logn; ++i)
for (j=1; j<=n-(1<<i)+1; ++j)
D[i][j] = min(D[i-1][j], D[i-1][j+(1<<(i-1))]);
for (i=1; i<=m; ++i) {
fscanf(fin, "%d%d", &a, &b);
for (k=1; (1<<k)<=b-a; ++k)
;
--k;
fprintf(fout, "%d\n", min(D[k][a], D[k][b-(1<<k)+1]));
}
return 0;
}