Pagini recente » Cod sursa (job #2415550) | Cod sursa (job #466494) | Cod sursa (job #2388175) | Cod sursa (job #49181) | Cod sursa (job #2699527)
#include <fstream>
#define dim (int)1e5 + 5
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int Arbore[4* dim];
void Update(int nod, int left, int right, int nr, int pozitie)
{
if (left == right)
{
Arbore[nod] = nr;
return;
}
int mid = (left + right) / 2;
if (pozitie <= mid)
Update(2 * nod, left, mid, nr, pozitie);
else
Update(2 * nod + 1, mid + 1, right, nr, pozitie);
Arbore[nod] = min(Arbore[2 * nod], Arbore[2 * nod + 1]);
}
int Query(int nod, int start, int end, int l, int r)
{
if (r<start || l>end)
return 2147483647;
if (l <= start && end <= r)
return Arbore[nod];
int mid = (start + end) / 2;
int p1 = Query(2 * nod, start, mid, l, r);
int p2 = Query(2 * nod + 1, mid + 1, end, l, r);
return min(p1, p2);
}
int main()
{
int M, N;
fin >> N >> M;
for (int i = 1; i <= N; ++i)
{
int x;
fin >> x;
Update(1, 1, N, x, i);
}
for (int i = 1; i <= M; ++i)
{
int a, b;
fin >> a >> b;
fout<<Query(1, 1, N, a, b)<<'\n';
}
}