Pagini recente » Cod sursa (job #2629694) | Cod sursa (job #3227062) | Cod sursa (job #578358) | Cod sursa (job #2552745) | Cod sursa (job #3299329)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int dp[18][100001];
int intervalFinder(int a,int b)
{
int dif=b-a+1;
int x=log2(dif);
return x;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>dp[0][i];
for(int k=1;k<=18;k++)
for(int i=1;i+(1<<k)-1<=n;i++)
{
int previousSize=(1<<(k-1));
dp[k][i]=min(dp[k-1][i],dp[k-1][i+previousSize]);
}
for(int k=1;k<=m;k++)
{
int x,y;
cin>>x>>y;
int lvl=intervalFinder(x,y);
cout<<min(dp[lvl][x],dp[lvl][y-(1<<lvl)+1])<<"\n";
}
return 0;
}