Pagini recente » Cod sursa (job #2144972) | Cod sursa (job #2094204) | Cod sursa (job #1361373) | Cod sursa (job #1840478) | Cod sursa (job #2821032)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, i, j, a, b;
int v[NMAX];
int aint[NMAX * 4];
void build(int node, int nleft, int nright)
{
if (nleft == nright)
aint[node] = v[nleft];
else
{
int nmid = (nleft + nright) / 2;
int leftson = node + 1;
int rightson = node + 2 * (nmid - nleft + 1);
build(leftson, nleft, nmid);
build(rightson, nmid + 1, nright);
aint[node] = min(aint[leftson], aint[rightson]);
}
}
int query(int node, int nleft, int nright, int qleft, int qright)
{
if (qleft <= nleft && qright >= nright)
return aint[node];
int nmid = (nleft + nright) / 2;
int leftson = node + 1;
int rightson = node + 2 * (nmid - nleft + 1);
int rez = NMAX;
if (qleft <= nmid)
rez = query(leftson, nleft, nmid, qleft, qright);
if (nmid < qright)
rez = min(rez, query(rightson, nmid + 1, nright, qleft, qright));
return rez;
}
int main()
{
in >> n >> m;
for (i = 0; i < n; ++i)
{
in >> v[i];
}
build(0, 0, n - 1);
for (i = 1; i <= m; ++i)
{
in >> a >> b;
out << query(0, 0, n - 1, a - 1, b - 1) << '\n';
}
return 0;
}