Pagini recente » Cod sursa (job #2788793) | d*********area_***b | Cod sursa (job #2571581) | Cod sursa (job #2909551) | Cod sursa (job #2776493)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,rmq[20][100005],st,dr,e[100005],p[20];
void precalculare()
{
int x=2,y=1;
while(x<=n)
{
for(int i=1;i<=n-x+1;i++)
rmq[y][i]=min(rmq[y-1][i],rmq[y-1][i+x/2]);
x*=2;
y++;
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)f>>rmq[0][i];
precalculare();
int x=1,y=0;
for(int i=1;i<=n;i++)
{
if(x*2==i)x*=2,y++;
e[i]=y;
p[y]=x;
}
int a,b;
for(int i=1;i<=m;i++)
{
f>>st>>dr;
a=e[dr-st+1];
b=p[a];
g<<min(rmq[a][st],rmq[a][dr-b+1])<<'\n';
}
}