Pagini recente » Cod sursa (job #2022336) | Cod sursa (job #164078) | Cod sursa (job #168431) | Arhiva de probleme | Cod sursa (job #1900152)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define nmax 100001
#define inf 100001
int n, arb[4*nmax+55], start, stop, val, poz, vmin;
int minim(int a, int b)
{
if(a<b)
return a;
return b;
}
void update(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=val;
return;
}
int mijl=(st+dr)/2;
if(poz<=mijl)
update(2*nod, st, mijl);
else update(2*nod+1, mijl+1, dr);
arb[nod]=minim(arb[2*nod], arb[2*nod+1]);
}
void query(int nod, int st, int dr)
{
if(st>=start && dr<=stop)
{
if(vmin>arb[nod])
vmin=arb[nod];
return;
}
int mijl=(st+dr)/2;
if(mijl>=start)
query(2*nod, st, mijl);
if(mijl<stop)
query(2*nod+1, mijl+1, dr);
}
int main()
{
int m, i, x, y;
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>x;
val=x; poz=i;
update(1, 1, n);
}
for(i=1; i<=m; i++)
{
fin>>x>>y;
start=x; stop=y;
vmin=inf;
query(1, 1, n);
fout<<vmin<<'\n';
}
return 0;
}