Pagini recente » Cod sursa (job #3355827) | Cod sursa (job #3328310) | Cod sursa (job #3250676) | Cod sursa (job #181717) | Cod sursa (job #3339916)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100001;
ifstream in("rmq.in");
ofstream out("rmq.out");
int arr[NMAX], t[4 * NMAX];
int N, M;
void build_min(int v, int tl, int tr)
{
if(tl == tr)
t[v] = arr[tl];
else
{
int tm = (tl + tr) / 2;
build_min(v * 2, tl, tm);
build_min(v * 2 + 1, tm + 1, tr);
t[v] = min(t[v * 2], t[v * 2 + 1]);
}
}
int query_min(int v, int tl, int tr, int l, int r)
{
if(l > r)
return 1e9;
if(tl == l && tr == r)
return t[v];
int tm = (tl + tr) / 2;
return min(query_min(v * 2, tl, tm, l, min(r, tm)), query_min(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
int main()
{
in >> N >> M;
for(int i = 1; i <= N; i++)
in >> arr[i];
int x, y;
build_min(1, 1, N);
for(int i = 1; i <= M; i++)
{
in >> x >> y;
out << query_min(1, 1, N, x, y) << "\n";
}
return 0;
}