Pagini recente » Cod sursa (job #2241181) | Cod sursa (job #135211) | Cod sursa (job #1225135) | Cod sursa (job #1596212) | Cod sursa (job #2150681)
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 100002;
int n, m, v[N], a[4 * N];
void precalc(int poz, int st, int dr) {
if (st == dr) {
a[poz] = v[st];
return;
}
precalc(2 * poz, st, (st + dr) / 2);
precalc(2 * poz + 1, (st + dr) / 2 + 1, dr);
a[poz] = min(a[2 * poz], a[2 * poz + 1]);
}
int rmq(int x, int y, int st, int dr, int poz) {
if (x <= st && y >= dr) return a[poz];
if (y < st || x > dr) return INT_MAX;
return min(rmq(x, y, st, (st + dr) / 2, poz * 2), rmq(x, y, (st + dr) / 2 + 1, dr, poz * 2 + 1));
}
int main()
{
int x, y;
in >> n >> m;
for (int i = 1; i <= n; i++) in >> v[i];
std::fill(a + 1, a + 4 * n + 1, INT_MAX);
precalc(1, 1, n);
for (int i = 0; i < m; i++) {
in >> x >> y;
out << rmq(x, y, 1, n, 1) << '\n';
}
out.close();
}