Pagini recente » Cod sursa (job #2575301) | Cod sursa (job #1046728) | Cod sursa (job #2900421) | Cod sursa (job #1391763) | Cod sursa (job #2932435)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int sp[20][100005];
int vlog[100005];
void fsp(int n)
{
for(int i=1;i<=vlog[n];i++)
{
for(int j=1;j<=n-(1<<(i))+1;j++)
sp[i][j]=min(sp[i-1][j],sp[i-1][j+(1<<(i-1))]);
}
}
int RMQ(int x,int y)
{
int k=y-x+1;
return min(sp[vlog[k]][x],sp[vlog[k]][y-(1<<vlog[k])+1]);
}
int main()
{
int n,m,x,y;
cin>>n>>m;
for(int i=2;i<=n;i++)
vlog[i]=1+vlog[i/2];
for(int i=1;i<=n;i++)
cin>>sp[0][i];
fsp(n);
for(int i=0;i<m;i++)
{
cin>>x>>y;
cout<<RMQ(min(x,y),max(x,y))<<'\n';
}
}