Pagini recente » Cod sursa (job #1837348) | Cod sursa (job #2899321) | Cod sursa (job #990144) | Cod sursa (job #2180048) | Cod sursa (job #583566)
Cod sursa(job #583566)
#include <cstdio>
using namespace std;
#define MAXN 100010
#define MAXL 18
#define min(a, b) (((a) < (b)) ? (a) : (b))
int log[MAXN], rmq[MAXL][MAXN], n, m;
FILE* fin = fopen ("rmq.in", "r");
FILE* fout = fopen ("rmq.out", "w");
int main ()
{
fscanf (fin, "%d %d\n", &n, &m);
log[0] = -1;
for (int i = 1; i <= n; ++i) {
log[i] = log [i >> 1] + 1;
fscanf (fin, "%d ", &rmq[0][i]);
}
for (int i = 1; (1 << i) <= n; ++i) {
for (int j = 1; j <= n - (1 << i) + 1; ++j) {
rmq[i][j] = min (rmq[i - 1][j], rmq[i - 1][j + (1 << i - 1)]);
}
}
for (int i = 1, x, y, diff; i <= m; ++i) {
fscanf (fin, "%d %d\n", &x, &y);
diff = y - x + 1;
fprintf (fout, "%d\n", min (rmq[log[diff]][x], rmq[log[diff]][x + diff - (1 << log[diff])]));
}
fclose (fin);
fclose (fout);
return 0;
}