Pagini recente » Cod sursa (job #1217517) | Cod sursa (job #1720795) | Cod sursa (job #22203) | Cod sursa (job #1530005) | Cod sursa (job #2601847)
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int lim=128024;
int tree[2*lim+5];
void add(int k,int x)
{
k+=lim;
tree[k]=x;
for(k/=2;k>=1;k/=2)
tree[k]=min(tree[2*k],tree[2*k+1]);
}
int minim(int l,int r)
{
int answer=INT_MAX;
l+=lim;
r+=lim;
while(l<=r)
{
if(l%2==1) answer=min(answer,tree[l++]);
if(r%2==0) answer=min(answer,tree[r--]);
l/=2; r/=2;
}
return answer;
}
int main()
{
int n,m,a,l,r;
cin>>n>>m;
for(int i=1;i<=2*lim;++i)
tree[i]=INT_MAX;
for(int i=1;i<=n;++i)
cin>>a,add(i,a);
for(int i=1;i<=m;++i)
{
cin>>l>>r;
cout<<minim(l,r)<<'\n';
}
return 0;
}