Pagini recente » Cod sursa (job #1933645) | Cod sursa (job #1145982) | Cod sursa (job #173997) | Cod sursa (job #1503906) | Cod sursa (job #1139726)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int DIM = 100010;
int n, m, pos, val, minim, start, stop, arb[4*DIM+100];
void update(int nod, int l, int r)
{
if(l == r)
{
arb[nod] = val;
return;
}
int mid = (l + r)/2;
if(pos <= mid)
update(2 * nod, l, mid);
else
update(2 * nod + 1, mid + 1, r);
arb[nod] = min(arb[2 * nod], arb[2 * nod + 1]);
}
void query(int nod, int l, int r)
{
int mid;
if(l >= start && r <= stop)
{
if(arb[nod] < minim)
minim = arb[nod];
return;
}
mid = l + (r - l) / 2;
if(start <= mid)
query(2 * nod, l, mid);
if(mid < stop)
query(2 * nod + 1, mid + 1, r);
}
void read()
{
f >> n >> m;
for(int i = 1; i <= n; ++i)
{
f >> val;
pos = i;
update(1, 1, n);
}
}
void debug()
{
for(int i = 1; i < 2 * n; ++i)
cout << arb[i] << " ";
}
int main()
{
read();
for(int i = 1; i <= m; ++i)
{
f >> start >> stop;
minim = 100010;
query(1, 1, n);
g << minim << '\n';
}
//debug();
}