Pagini recente » Cod sursa (job #514617) | Cod sursa (job #918907) | Cod sursa (job #2513272) | Cod sursa (job #1613579) | Cod sursa (job #2036582)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
#define MAX 100000
int v[MAX], tree[4 * MAX];
int N, M;
void BuildTree(int node = 0, int left = 0, int right = N - 1)
{
if (left == right)
{
tree[node] = v[left];
return;
}
int mid = (left + right) / 2;
BuildTree(2 * node + 1, left, mid);
BuildTree(2 * node + 2, mid + 1, right);
tree[node] = min(tree[2 * node + 1], tree[2 * node + 2]);
}
int Query(int x, int y, int node = 0, int left = 0, int right = N - 1)
{
if (left >= x && right <= y)
return tree[node];
int mid = (left + right) / 2;
if (y <= mid)
return Query(x, y, 2 * node + 1, left, mid);
if (x > mid)
return Query(x, y, 2 * node + 2, mid + 1, right);
return min(Query(x, y, 2 * node + 1, left, mid),
Query(x, y, 2 * node + 2, mid + 1, right));
}
int main()
{
in >> N >> M;
for (int i = 0; i < N; i++)
{
in >> v[i];
}
BuildTree();
for (int i = 0; i < M; i++)
{
int l, r;
in >> l >> r;
out << Query(l - 1, r - 1) << endl;
}
}