Pagini recente » Cod sursa (job #3141961) | Cod sursa (job #691534) | Cod sursa (job #614004) | Cod sursa (job #3187754) | Cod sursa (job #2819650)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int MAXN = 1e5;
const int MAXLOG = 17;
int logVect[MAXN];
int v[MAXN];
int a[MAXLOG + 1][MAXN];
int query(int left, int right) {
int len = logVect[right - left + 1];
return min(a[len][left], a[len][right - (1 << len) + 1]);
}
int main() {
FILE *fin, *fout;
int n, m, i, pow, left, right;
fin = fopen("rmq.in", "r");
fscanf(fin, "%d%d", &n, &m);
for (i = 2; i <= n; i++)
logVect[i] = logVect[i / 2] + 1;
for (i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
for (i = 0; i < n; i++)
a[0][i] = v[i];
for (pow = 1; pow <= logVect[n]; pow++) {
for (i = 0; i <= n - (1 << pow); i++)
a[pow][i] = min(a[pow - 1][i], a[pow - 1][i + (1 << (pow - 1))]);
}
fout = fopen("rmq.out", "w");
for (i = 0; i < m; i++) {
fscanf(fin, "%d%d", &left, &right);
left--;
right--;
fprintf(fout, "%d\n", query(left, right));
}
fclose(fin);
fclose(fout);
return 0;
}