Pagini recente » Cod sursa (job #378224) | Cod sursa (job #991809) | Cod sursa (job #26792) | Cod sursa (job #136205) | Cod sursa (job #1214427)
#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=min(mn[urm[x]][dr-p+1],mn[urm[x]][st]);
g<<minn<<'\n';
}
f.close();
g.close();
return 0;
}