Pagini recente » Cod sursa (job #1471345) | Cod sursa (job #1824719) | Cod sursa (job #1876548) | Cod sursa (job #1577919) | Cod sursa (job #742989)
Cod sursa(job #742989)
#include <fstream>
#define inf 1<<30
#define LE 100007
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int minim,i,A[2*LE],b[LE],X,Y,j,n,m;
void Push(int K,int PO)
{
int st=1;
int dr=n;
int poz=1,mij;
while (6)
{
mij=(st+dr)/2;
A[poz]=min(A[poz],K);
if (st==dr)
break;
if(PO<=mij)
{
dr=mij;
poz*=2;
}
else
{
st=mij+1;
poz=poz*2+1;
}
}
}
void query(int st,int dr,int Poz)
{
if (X<=st&&Y>=dr)
{
minim=min(A[Poz],minim);
return;
}
int mij=(st+dr)/2;
if (X<=mij)
query(st,mij,2*Poz);
if (Y>mij)
query(mij+1,dr,2*Poz+1);
}
int main()
{
f>>n>>m;
for(i=1; i<=n+n; ++i)
A[i]=inf;
for(i=1; i<=n; ++i)
{
f>>b[i];
Push(b[i],i);
}
for(j=1; j<=m; ++j)
{
f>>X>>Y;
minim=inf;
query(1,n,1);
g<<minim<<'\n';
}
f.close();
g.close();
return 0;
}