64,642
社区成员
发帖
与我相关
我的任务
分享
#define max3(a,b,c) max2(max2(a,b),max2(b,c))
#define max2(a,b) ((a) > (b) ? (a) : (b))
int smallest(int *narray,int l,int r)
{
int min = narray[l];
int idx = l;
for(int i = l ; i <= r; i++)
{
if(narray[i] < min)
{
min = narray[i];
idx = i;
}
}
return idx;
}
int MaxHistogram(int *narray,int l,int r)
{
if( l == r)
{
return narray[l];
}
int idx = smallest(narray,l,r);
if(idx == l)
return max2(MaxHistogram(narray,idx+1,r),narray[idx]*(r-l+1));
else if(idx == r)
return max2(MaxHistogram(narray,l,idx-1),narray[idx]*(r-l+1));
else
return max3(MaxHistogram(narray,l,idx-1),
MaxHistogram(narray,idx+1,r),
narray[idx]*(r-l+1));
}