Pagini recente » Cod sursa (job #2703389) | Rating Marin - Constantin Petcu (MarinPetcu) | Cod sursa (job #2471433) | Cod sursa (job #2580864) | Cod sursa (job #743258)
Cod sursa(job #743258)
#include<stdio.h>
inline int min(int a, int b)
{
if(a<=b)
return a;
return b;
}
inline int pow2(int a)
{
int i;
for(i=1;i<=a;i=i*2);
return i;
}
inline int log(int a)
{
int i=0;
while(a!=1)
{
a=a/2;
++i;
}
return i;
}
int a[20][100005];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,x,y,l;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d",&a[0][i]);
a[0][0]=a[0][n+1]=a[0][n+2]=100100;
l=log(n)+1;
for(i=1;i<=l;i++)
for(j=1;j<=n-i;++j)
a[i][j]=min(a[i-1][j],a[i-1][j+pow2(i-1)]);
for(i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
l=log(y-x+1);
printf("%d\n",min(a[l][x],a[l][y-pow2(l)+1]));
}
return 0;
}