Pagini recente » Cod sursa (job #1560456) | Cod sursa (job #692994) | Cod sursa (job #1463058) | Cod sursa (job #1822766) | Cod sursa (job #1138606)
#include <stdio.h>
int const N=100001;
int r[N][20],lg[N],v[N];
int min(int x,int y)
{
if(x<y) return x;
return y;
}
int q(int x,int y,int p2)
{
return min(r[x+(1<<p2)-1][p2],r[y][p2]);
}
int main()
{
int i,j,x,y,n,m,p2;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
{
r[i][0]=v[i];
for(j=1;(1<<(j-1))<i;j++)
r[i][j]=min(r[i-(1<<(j-1))][j-1],r[i][j-1]);
}
lg[1]=0;
for(i=2;i<=n;i++)
{
lg[i]=lg[i-1];
if((1<<(lg[i]+1))==i) lg[i]++;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
p2=lg[y-x+1];
printf("%d\n",q(x,y,p2));
}
return 0;
}