Pagini recente » Cod sursa (job #2761298) | Cod sursa (job #1201912) | Cod sursa (job #587678) | Cod sursa (job #2058606) | Cod sursa (job #2902836)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout("rmq.out");
vector <int> values(100001);
vector <int> nodes(400100);
void construct(int pos, int left, int right)
{
if(left == right)
{
nodes[pos] = values[left];
return;
}
construct(pos*2, left, (left + right)/2);
construct(pos*2+1, (left + right)/2+1, right);
nodes[pos] = min(nodes[pos*2], nodes[2*pos+1]);
}
int min_value(int pos, int left, int right, int start, int finish)
{
if(start <= left && right <= finish)
return nodes[pos];
int mid = (left + right) / 2, v1 = 1<<30, v2 = 1<<30;
if(start <= mid)
v1 = min_value(pos * 2, left, mid, start, finish);
if(finish > mid)
v2 = min_value(pos * 2 + 1, mid + 1, right, start, finish);
return min(v1, v2);
}
int main()
{
int n, m;
fin>>n>>m;
for(int i = 1; i <= n; i++)
fin>>values[i];
construct(1, 1, n);
for(int i = 0; i < m; i++)
{
int a, b;
fin>>a>>b;
fout<<min_value(1, 1, n, a, b)<<'\n';
}
return 0;
}