Pagini recente » Cod sursa (job #3300991) | Cod sursa (job #2567112) | Cod sursa (job #3337410) | Cod sursa (job #2481324) | Cod sursa (job #3346322)
#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)
{
int mini=1e7;
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=1; i<=n; i++)
{
fin>>v[i];
int b=(i-1)/len;
if (bl[b])
{
bl[b]=min(bl[b], v[i]);
}
else
{
bl[b]=v[i];
}
}
while (q--)
{
fin>>a>>b;
fout<<query(a, b)<<'\n';
}
return 0;
}