Pagini recente » Cod sursa (job #986545) | Cod sursa (job #2655924) | Cod sursa (job #2703804) | Cod sursa (job #1487955) | Cod sursa (job #154386)
Cod sursa(job #154386)
#include <stdio.h>
#include <math.h>
#define inf 100000
long n,mc,i,j,l,min,a[100000],m[1000];
long x,y;
long rmq(long n,long x,long y){
long i,min=inf;
long c1,c2;
c1=x/l+1;
if ((c1-1)*l+1<x)c1++;
for (i=x;i<=(c1-1)*l&&i<=y;i++)
if (a[i]<min)min=a[i];
c2=y/l;
i=x;
if (c2*l+1>i)i=c2*l+1;
for (;i<=y;i++)
if (a[i]<min)min=a[i];
for (i=c1;i<=c2;i++)
if (m[i]<min)min=m[i];
return min;
}
int main(){
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf ("%ld %ld",&n,&mc);
for (i=1;i<=n;i++)scanf ("%ld",&a[i]);
//impartirea sirului in bucati de sqrt(n);
l=sqrt(n);
for (i=1;i<=l;i++){
m[i]=inf;
for (j=(i-1)*l+1;j<=l*i;j++)
if (a[j]<m[i])m[i]=a[j];
}
for (i=1;i<=mc;i++){
scanf ("%ld %ld",&x,&y);
printf("%ld\n",rmq(n,x,y));
}
return 0;
}