Pagini recente » Cod sursa (job #141210) | Cod sursa (job #1084283) | Cod sursa (job #956655) | Cod sursa (job #728667) | Cod sursa (job #309646)
Cod sursa(job #309646)
#include<stdio.h>
#define NMAX 100001
#define min(a,b) a>b?b:a
int a[NMAX],m[100][NMAX],lg[NMAX],n,M;
int main()
{
int i,j,x,y,dif,log;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&M);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=1;i<=n;i++)
m[0][i]=a[i];
for(i=1;(1<<i)<=n;i++)
for(j=1;j+(1<<i)<=n+1;j++)
m[i][j]=min(m[i-1][j],m[i-1][j+(1<<(i-1))]);
for(;M;M--)
{
scanf("%d%d",&x,&y);
dif=y-x+1;
log=lg[dif];
printf("%d\n",min(m[log][x],m[log][x+dif-(1<<log)]));
}
return 0;
}