Pagini recente » Istoria paginii runda/concurs_000004/clasament | Cod sursa (job #980166) | Cod sursa (job #1462212) | Autentificare | Cod sursa (job #2010512)
#include <bits/stdc++.h>
#define oo 0x3f3f3f
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
vector<int>segTree;
int N, M;
void buildSegTree(int root, int left, int right)
{
if (left == right)
{
fin >> segTree[root];
return;
}
int mid = (left + right) >> 1;
buildSegTree(root << 1, left, mid);
buildSegTree( (root << 1) | 1, mid + 1, right);
segTree[root] = min(segTree[root << 1], segTree[ (root << 1) | 1]);
}
int query(int root, int left, int right, int _left, int _right)
{
if (left >= _left && right <= _right)
return segTree[root];
if (left > _right || right < _left)
return oo;
int mid = (left + right) >> 1;
return min( query(root << 1, left, mid, _left, _right),
query( (root << 1) | 1, mid + 1, right, _left, _right ) );
}
int main()
{
fin >> N >> M;
segTree.resize(N << 2, 0);
buildSegTree(1, 1, N);
for(int x, y; M; --M)
{
fin >> x >> y;
fout << query(1, 1, N, x, y) << "\n";
}
return 0;
}