Pagini recente » Cod sursa (job #1639710) | Cod sursa (job #2326441) | Cod sursa (job #959872) | Cod sursa (job #2271526) | Cod sursa (job #2375882)
#include <fstream>
#include <cstring>
using namespace std;
#define INF 0x3f3f3f3f
int h[200100], n, m;
void update(int poz, int val, int k = 1, int st = 1, int dr = n)
{
int mij = (st + dr) / 2;
if(st == dr && dr == poz)
{
h[k] = val;
return;
}
if(poz >= st && poz <= mij)
update(poz, val, k * 2, st, mij);
if(poz <= dr && poz > mij)
update(poz, val, k * 2 + 1, mij + 1, dr);
h[k] = min(h[k * 2], h[k * 2 + 1]);
}
int query(int a, int b, int st = 1, int dr = n, int k = 1)
{
int mij = (st + dr) / 2, minval = INF;
if(a <= st && b >= dr)
return h[k];
if(a <= mij)
minval = min(minval, query(a, b, st, mij, k * 2));
if(b > mij)
minval = min(minval, query(a, b, mij + 1, dr, k * 2 + 1));
return minval;
}
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
int x, y;
in >> n >> m;
memset(h, 0x3f, sizeof(int) *(2 * n + 1));
for(int i = 0; i < n; i++)
{
in >> x;
update(i + 1, x);
}
for(int i = 0; i < m; i++)
{
in >> x >> y;
out << query(x, y) << endl;
}
in.close();
out.close();
}