Pagini recente » Cod sursa (job #2020812) | Cod sursa (job #173052) | Cod sursa (job #2361553) | Cod sursa (job #1857861) | Cod sursa (job #432236)
Cod sursa(job #432236)
#include <stdio.h>
long min(long x,long y)
{
if(x<y) return x;
else return y;
}
long M,N,P,x,y,A[20][100002],i,j,d1,d2,nr1,nr2;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld%ld",&N,&M);
for(i=1;i<=N;i++) scanf("%ld",&A[0][i]);
P=0;
while(1<<P<=N) P++;
P--;
for(i=1;i<=P;i++)
for(j=1;j<=N-(1<<(i-1));j++)
A[i][j]=min(A[i-1][j],A[i-1][j+(1<<(i-1))]);
for(i=1;i<=M;i++)
{
scanf("%ld%ld",&x,&y);
P=0;
while(1<<P<y) P++;
P--;
d1=(1<<P)-x+1;
nr1=0;
while(d1%2==0&&d1)
{
d1/=2;
nr1++;
}
d2=y-(1<<P);
nr2=0;
while(d2%2==0&&d2)
{
d2/=2;
nr2++;
}
printf("%ld\n",min(A[nr1][x],A[nr2][(1<<P)+1]));
}
return 0;
}