Pagini recente » Cod sursa (job #732833) | Borderou de evaluare (job #2155005) | Cod sursa (job #1024055) | Cod sursa (job #205013) | Cod sursa (job #3313478)
#include <fstream>
#define int long long
const int NMAX=1000000;
const int bs=18;
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int v[NMAX],mini[NMAX];
int getBucket(int i)
{
return (i+bs-1)/bs;
}
int query(int l,int r)
{
int ans=1e9;
for(int i=l;i<=r;i++)
{
if(i%bs==1)
{
if(i+bs-1<=r)
{
ans=min(ans,mini[getBucket(i)]);
i+=bs-1;
continue;
}
}
ans=min(ans,v[i]);
}
return ans;
}
signed main()
{
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++) mini[i]=1e9;
for(int i=1;i<=n;i++)
{
cin>>v[i];
mini[getBucket(i)]=min(mini[getBucket(i)],v[i]);
}
for(int i=1;i<=t;i++)
{
int tip,l,r;
cin>>l>>r;
cout<<query(l,r)<<endl;
}
return 0;
}