Pagini recente » Cod sursa (job #2514430) | Cod sursa (job #216091)
Cod sursa(job #216091)
#include <fstream>
#define MAX 100001
#define infinit 0x3f3f3f
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,m,h[4*MAX],sir[MAX],poz,val;
int lft,rigt;
int rez;
int min(int a,int b)
{
return a<b?a:b;
}
void adauga(int nod,int st,int dr)
{
if (st==dr)
h[nod]=val;
else
{
int mij=(st+dr)>>1;
int stg=nod<<1;
int dre=(nod<<1)+1;
if (poz<=mij)
adauga(stg,st,mij);
if (poz>mij)
adauga(dre,mij+1,dr);
h[nod]=min(h[stg],h[dre]);
}
}
void citire()
{
fin>>n>>m;
memset(h,infinit,sizeof h);
for ( poz=1;poz<=n;poz++)
{
fin>>val;
adauga(1,1,n);
}
}
void fi(int nod,int st,int dr)
{
if (st>=lft && dr<=rigt)
rez=min(rez,h[nod]);
else
{
int mij=(st+dr)>>1;
int stg=nod<<1;
int dre=(nod<<1)+1;
if (lft<=mij)
fi(stg,st,mij);
if (rigt>mij)
fi(dre,mij+1,dr);
}
}
void afisare()
{
for (int i=0;i<m;i++)
{
fin>>lft>>rigt;
rez=infinit;
fi(1,1,n);
fout<<rez<<"\n";
}
}
int main ()
{
citire();
afisare();
return 0;
}