Pagini recente » Cod sursa (job #532670) | Cod sursa (job #85959) | Cod sursa (job #506550) | Cod sursa (job #256776) | Cod sursa (job #1834158)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int INF = 0x3f3f3f3f;
int N, M;
int a, b, minim;
int V[100001], AINT[1 << 18];
void updateinit(int nod, int lt, int rt)
{
if (lt == rt)
{
AINT[nod] = V[lt];
return;
}
int mid = (lt + rt) / 2;
updateinit(nod * 2, lt, mid);
updateinit(nod * 2 + 1, mid + 1, rt);
AINT[nod] = min(AINT[nod * 2], AINT[nod * 2 + 1]);
}
void query(int nod, int lt, int rt, int start, int finish)
{
if (start <= lt && rt <= finish)
{
minim = min(minim, AINT[nod]);
return;
}
if (lt == rt)
return;
int mid = (lt + rt) / 2;
if (start <= mid)
query(nod * 2, lt, mid, start, finish);
if (mid < finish)
query(nod * 2 + 1, mid + 1, rt, start, finish);
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; ++i)
fin >> V[i];
updateinit(1, 1, N);
for (int i = 1; i <= M; ++i)
{
fin >> a >> b;
minim = INF;
query(1, 1, N, a, b);
fout << minim << '\n';
}
return 0;
}