Pagini recente » Cod sursa (job #73908) | Cod sursa (job #3239001) | Cod sursa (job #36335) | Cod sursa (job #1218111) | Cod sursa (job #2605949)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int lim=1e5+3;
int tree[18][lim];
int lg[lim];
void init()
{
for(int i=1;(1<<i)<lim;++i)
++lg[(1<<i)];
for(int i=1;i<lim;++i)
lg[i]+=lg[i-1];
}
int main()
{
init();
int n,m,a,x,y;
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a,tree[0][i]=a;
for(int i=1;(1<<i)<=n;++i)
for(int j=1;j+(1<<i)<=n+1;++j)
tree[i][j]=min(tree[i-1][j],tree[i-1][j+(1<<(i-1))]);
while(m--)
{
cin>>x>>y;
int k=lg[y-x+1];
cout<<min(tree[k][x],tree[k][y-(1<<k)+1])<<'\n';
}
return 0;
}