Pagini recente » Cod sursa (job #1385004) | Cod sursa (job #159087) | Cod sursa (job #339951) | Cod sursa (job #1514649) | Cod sursa (job #1356751)
#include <fstream>
#include <cmath>
#define nMax 100001
using namespace std;
ifstream x ("rmq.in");
ofstream y ("rmq.out");
int n,m;
int a[nMax];
int main()
{
int i,j,k;
x>>n>>m;
for(i=1;i<=n;i++)
x>>a[i];
int c=1;
while(c*c<n)
c++;
c--;
//c=int(sqrt(n));
int mask[c+1];
for(j=0;j<=c;j++)
mask[j]=100000;
//y<<c<<'\n';
k=0;
i=0;
while(i+c<=n)
{
k++;
for(j=1;j<=c;j++)
mask[k]=min(mask[k],a[i+j]);
i+=c;
}
/*
for(i=1;i<=c;i++)
y<<mask[i]<<' ';
y<<'\n';
y<<c<<"\n\n";
*/
int minn;
int l,r;
for(i=1;i<=m;i++)
{
x>>l>>r;
minn=100000;
while(l<=r)
{
if((l-1)%c==0 && l+c<=r)
{
l+=c;
minn=min(minn,mask[(l-1)/c]);
}
else
{
minn=min(minn,a[l]);
l++;
}
}
y<<minn<<'\n';
}
return 0;
}