Pagini recente » Cod sursa (job #3198890) | Istoria paginii runda/oni_2005 | Cod sursa (job #1560154) | Cod sursa (job #863754) | Cod sursa (job #513268)
Cod sursa(job #513268)
#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[i][0]=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>>1)<=N)
{
A[i][j]=min(A[i][j-1],A[i+(p>>1)][j-1]);
}
else
{
A[i][j]=A[i][j-1];
}
}
}
for(register int i=1;i<=M;++i)
{
fin>>st>>sf;
int len=((sf-st+1)>>1);
sol=min(A[st][lg[len]],A[sf-lg[len]][lg[len]]);
fout<<sol<<"\n";
}
fin.close();
fout.close();
return 0;
}