Pagini recente » Cod sursa (job #2872174) | Cod sursa (job #494364) | Cod sursa (job #3252555) | Cod sursa (job #2200330) | Cod sursa (job #3346337)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q,v[100001],bl[1001],a,b,len;
int query(int a,int b)
{
if (a>b)
{
swap(a,b);
}
int mini=1e9;
int bloca=(a-1)/len,blocb=(b-1)/len;
if (bloca==blocb)
{
for (int i=a; i<=b; i++)
{
mini=min(mini,v[i]);
}
return mini;
}
int enda=min(n,(bloca+1)*len);
for (int i=a; i<=enda; i++)
{
mini=min(mini,v[i]);
}
int startb=blocb*len+1;
for (int i=startb; i<=b; i++)
{
mini=min(mini,v[i]);
}
for (int i=bloca+1; i<=blocb-1; i++)
{
mini=min(mini,bl[i]);
}
return mini;
}
int main()
{
fin>>n>>q;
len=floor(sqrt(n));
if (len*len<n)
{
len++;
}
for (int i=0; i<=1000; i++)
{
bl[i]=1e9;
}
for (int i=1; i<=n; i++)
{
fin>>v[i];
int b=(i-1)/len;
bl[b]=min(bl[b],v[i]);
}
while (q--)
{
fin>>a>>b;
fout<<query(a,b)<<'\n';
}
return 0;
}