Pagini recente » Cod sursa (job #663211) | Cod sursa (job #595085) | Cod sursa (job #982909) | Cod sursa (job #1417358) | Cod sursa (job #513305)
Cod sursa(job #513305)
#include <fstream>
using namespace std;
const char InFile[]="rmq.in";
const char OutFile[]="rmq.out";
const int MaxN=100111;
const int MAX=100111;
const int LogMaxN=20;
ifstream fin(InFile);
ofstream fout(OutFile);
int v[MaxN],sol,N,M,st,sf,A[LogMaxN][MaxN],lg[MaxN];
int main()
{
fin>>N>>M;
for(register int i=1;i<=N;++i)
{
fin>>v[i];
A[0][i]=v[i];
}
for(register int i=2;i<=N;++i)
{
lg[i]=lg[i>>1]+1;
}
int p=1;
for(register int j=1;j<LogMaxN;++j,p<<=1)
{
for(register int i=1;i<=N;++i)
{
if(i+p<=N)
{
A[j][i]=min(A[j-1][i],A[j-1][i+p]);
}
else
{
A[j][i]=A[j-1][i];
}
}
}
for(register int i=1;i<=M;++i)
{
fin>>st>>sf;
int len=(sf-st+1);
sol=min(A[lg[len]][st],A[lg[len]][sf-(1<<lg[len])+1]);
fout<<sol<<"\n";
}
fin.close();
fout.close();
return 0;
}