Pagini recente » Cod sursa (job #2200818) | Cod sursa (job #1846646) | Cod sursa (job #1836073) | Cod sursa (job #2439649) | Cod sursa (job #512965)
Cod sursa(job #512965)
#include <fstream>
#include <cmath>
using namespace std;
const char InFile[]="rmq.in";
const char OutFile[]="rmq.out";
const int MaxN=100111;
const int MAX=100111;
ifstream fin(InFile);
ofstream fout(OutFile);
int v[MaxN],sol,N,M,st,sf,sqrtN,N2,v2[MaxN];
int main()
{
fin>>N>>M;
for(register int i=1;i<=N;++i)
{
fin>>v[i];
}
sqrtN=(int)(ceil(sqrt((double)(N))));
N2=sqrtN*sqrtN;
for(register int i=N+1;i<=N2;++i)
{
v[i]=MAX;
}
for(register int i=1;i<=sqrtN;++i)
{
v2[i]=MAX;
for(register int j=1;j<=sqrtN;++j)
{
v2[i]=min(v2[i],v[++st]);
}
}
for(register int i=1;i<=M;++i)
{
fin>>st>>sf;
sol=MAX;
int j=0;
int stl,drl;
while(j*sqrtN<st)
{
++j;
}
++j;
stl=min(sf,sqrtN*(j-1));
for(;sqrtN*j<=sf;++j)
{
sol=min(sol,v2[j]);
}
drl=max(st,sqrtN*(j-1));
for(register int j=st;j<=stl;++j)
{
sol=min(sol,v[j]);
}
for(register int j=drl;j<=sf;++j)
{
sol=min(sol,v[j]);
}
fout<<sol<<"\n";
}
fin.close();
fout.close();
return 0;
}