Pagini recente » Cod sursa (job #2237156) | Cod sursa (job #2089705) | Cod sursa (job #1172413) | Cod sursa (job #1907354) | Cod sursa (job #2406583)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int nmax = 1e5 + 5, inf = 1e9;
vector <int> v(nmax), arbint(5 * nmax);
int n, q, start, finish;
void build (int ls = 1, int ld = n, int pos = 1)
{
int mij;
if (ls == ld)
{
arbint[pos] = v[ls];
return;
}
mij = (ls + ld) / 2;
build(ls, mij, 2 * pos);
build(mij + 1, ld, 2 * pos + 1);
arbint[pos] = min(arbint[2*pos], arbint[2*pos+1]);
}
int query (int ls = 1, int ld = n, int pos = 1)
{
int FIRST = inf, SECOND = inf, mij;
if (ls >= start && ld <= finish)
{
return arbint[pos];
}
mij = (ls + ld) / 2;
if (start <= mij) FIRST = query(ls, mij, 2*pos);
if (mij < finish) SECOND = query(mij+1, ld, 2*pos+1);
return min(FIRST, SECOND);
}
int main()
{
fin >> n >> q;
for (int i=1; i<=n; ++i) fin >> v[i];
build();
while (q--)
{
fin >> start >> finish;
fout << query() << '\n';
}
return 0;
}