Pagini recente » Cod sursa (job #971926) | Cod sursa (job #723600) | Cod sursa (job #2959583) | Cod sursa (job #3154986) | Cod sursa (job #1214406)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
long nr,x,n,i,j,p,m,st,dr,minn,mn[18][100011],urm[100001];
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
f>>mn[0][i];
nr=1;x=2;
while(x<=n)
{
nr++;
x*=2;
}
x=1;
for (i=1;i<nr;i++)
{
for (j=1;j<=n-x+1;j++)
mn[i][j]=min(mn[i-1][j], mn[i-1][j+x]);
x*=2;
}
urm[1]=0; urm[2]=1; x=2;
for (i=3;i<=n;i++)
if (x*2==i)
{
x*=2;
urm[i]=urm[i-1]+1;
}
else urm[i]=urm[i-1];
for (i=1;i<=m;i++)
{
f>>st>>dr;
x=dr-st+1;
minn=mn[0][dr];
while (x!=0)
{
p=1<<urm[x];
minn=min(mn[urm[x]][dr-p+1],minn);
x-=p;
dr-=p;
}
g<<minn<<'\n';
}
f.close();
g.close();
return 0;
}