Pagini recente » Cod sursa (job #162687) | Cod sursa (job #736043) | Cod sursa (job #124345) | Cod sursa (job #2946141) | Cod sursa (job #1467477)
#include <cstdio>
#include <cmath>
int n,m;
int lun[100],a[100001];
int main()
{
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
int s=sqrt(n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int lungime=n/s;
if(n%s!=0) lungime++;
for(int i=1;i<=lungime;i++)
{
lun[i]=a[(i-1)*s+1];
for(int j=1;j<=s;j++)
{
if(j+(i-1)*s>n) break;
if(lun[i]>a[j+(i-1)*s]) lun[i]=a[j+(i-1)*s];
}
}
//for(int i=1;i<=lungime;i++) printf("%d ",lun[i]);
int i1,i2;
for(int quer=1;quer<=m;quer++)
{
scanf("%d%d",&i1,&i2);
int rasp=10000000;
if(i1%s!=1)
{
if(i1%s==0)
{
if(rasp>a[i1]) rasp=a[i1];
i1++;
}
else
{
int targ=i1+(s-(i1%s))+1;
for(int i=i1;i<targ;i++) if(rasp>a[i]) rasp=a[i];
i1=targ;
}
}
if(i2%s!=0)
{
int targ=i2-(i2%s);
for(int i=targ+1;i<=i2;i++)
{
if(rasp>a[i]) rasp=a[i];
}
i2=targ;
}
i1/=s;
i1++;
i2/=s;
for(int i=i1;i<=i2;i++) if(rasp>lun[i]) rasp=lun[i];
printf("%d\n",rasp);
}
}