Pagini recente » Monitorul de evaluare | Cod sursa (job #713074) | Cod sursa (job #1011301) | Cod sursa (job #807789) | Cod sursa (job #2887993)
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int rmq[1000001][20],n,m,x,y;
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
fin>>rmq[i][0];
}
for(int exp=1,lg=2;lg<=n;exp++,lg*=2)
{
for(int i=1;i+lg-1<=n;i++)
rmq[i][exp]=min(rmq[i][exp-1],rmq[i+lg/2][exp-1]);
}
for(int i=1;i<=m;i++)
{
fin>>x>>y;
int pmax=1,pw=0;
while(pmax<=y-x+1)
{
pmax*=2;
pw++;
}
pw--;
fout<<min(rmq[x][pw],rmq[y-(1<<pw)+1][pw])<<'\n';
}
fin.close();
fout.close();
return 0;
}