Pagini recente » Cod sursa (job #2205601) | Cod sursa (job #1308369) | Cod sursa (job #2710408) | Cod sursa (job #2120329) | Cod sursa (job #2611638)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int lim=1e5+3;
const int lgm=18;
int tree[lgm][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,x,y;
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>x,tree[0][i]=x;
for(int p=1;(1<<p)<=n;++p)
for(int i=1;i+(1<<p)<=n+1;++i)
tree[p][i]=min(tree[p-1][i],tree[p-1][i+(1<<(p-1))]);
while(m--)
{
cin>>x>>y;
int d=lg[y-x+1];
cout<<min(tree[d][x],tree[d][y-(1<<d)+1])<<'\n';
}
return 0;
}