Pagini recente » Cod sursa (job #1090506) | Cod sursa (job #803410) | Cod sursa (job #2954404) | Cod sursa (job #846466) | Cod sursa (job #3242675)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int v[100001],dp[100001][17];
int main()
{
int n,m,i,j,x,y,nr,k;
cin>>n>>m;
for(i=1;i<=n;i++)
{
cin>>v[i];
dp[i][0]=i;
}
for(j=1;(1<<j)<=n;j++)
{
for(i=1;i-1+(1<<j)<=n;i++)
{
if(v[dp[i][j-1]]<=v[dp[i+(1<<(j-1))][j-1]])
dp[i][j]=dp[i][j-1];
else
dp[i][j]=dp[i+(1<<(j-1))][j-1];
}
}
for(i=1;i<=m;i++)
{
cin>>x>>y;
nr=y-x+1;
k=0;
while(nr>0)
{
k++;
nr>>=1;
}
k--;
cout<<min(v[dp[x][k]],v[dp[y-(1<<k)+1][k]])<<'\n';
}
return 0;
}