Pagini recente » Cod sursa (job #687124) | Cod sursa (job #2576205) | Cod sursa (job #1306401) | Cod sursa (job #107734) | Cod sursa (job #2310709)
#include <fstream>
#define NMax 100001
#define INF 900000
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int interval_tree[NMax * 4];
void BuildTree(int Node, int Left, int Right)
{
if ( Left == Right )
fin >> interval_tree[Node];
else
{
int Mid = (Left + Right) / 2;
BuildTree(2 * Node, Left, Mid);
BuildTree(2 * Node + 1, Mid + 1, Right);
interval_tree[Node] = min(interval_tree[2 * Node], interval_tree[2 * Node + 1]);
}
}
int Query(int Node, int Left, int Right, int A, int B)
{
if (A <= Left && Right <= B)
return interval_tree[Node];
else
{
int res1 = INF, res2 = INF;
int Mid = (Left + Right) / 2;
if (A <= Mid)
res1 = Query(2 * Node, Left, Mid, A , B);
if (B > Mid)
res2 = Query(2 * Node + 1, Mid + 1, Right, A, B);
return min(res1, res2);
}
}
int main()
{
int N, M, x, y;
fin >> N >> M;
BuildTree(1, 1, N);
for (int i = 1 ; i <= M ; ++i)
{
fin >> x >> y;
fout << Query(1, 1, N, x, y) << '\n';
}
return 0;
}