Pagini recente » Cod sursa (job #2299617) | Cod sursa (job #1451074) | Cod sursa (job #1779726) | Cod sursa (job #2598894) | Cod sursa (job #2776492)
#include <iostream>
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()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>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++)
{
cin>>st>>dr;
a=e[dr-st+1];
b=p[a];
cout<<min(rmq[a][st],rmq[a][dr-b+1])<<'\n';
}
}