Pagini recente » Cod sursa (job #240882) | Cod sursa (job #1958982) | Cod sursa (job #2565994) | Cod sursa (job #3138678) | Cod sursa (job #1050637)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int n_max=100001;
const int inf=100001;
int n, i, v[n_max], m[n_max], l, k, x, y, q;
int minim(int x, int y)
{
int i, mini=inf, s=x/l, d=y/l;
for(i=s+1; i<d; i++)
if(mini>m[i]) mini=m[i];
for(i=x; i/l==s; i++)
if(v[i]<mini) mini=v[i];
for(i=y; i/l==d; i--)
if(v[i]<mini) mini=v[i];
return mini;
}
int main()
{
cin>>n>>q;
l=sqrt(n);
k=n/l;
if(n%l) k++;
for(i=0; i<k; i++) m[i]=inf;
for(i=0; i<n; i++)
{
cin>>v[i];
if(v[i]<m[i/l]) m[i/l]=v[i];
}
for(i=1; i<=q; i++)
{
cin>>x>>y;
cout<<minim(x-1, y-1)<<'\n';
}
return 0;
}