虽然是理解了二分,但是我觉得它所采用的意思应该是和我想的是一样的,但是我自己提交就是WA
这是采用二分:
bool cmp(node a,node b)
{
if(a.w!=b.w)
{
return a.w<b.w;
}else{
return a.h>b.h;
}
}
int result(int n)
{
int l,sum=0,k,r;
int hash[20050]={0};
for(int i=0;i<n;i++)
{
l=0,r=sum;
while(l<r)
{
k=(l+r)/2;//因为r和sum相等,所以k只是略微的比l大一点,当k取整数时,和l近似相等
if(hash[k]>=num[i].h)//当前一项大于后一项的高度时,l加一,加完一后,差不多和r相等了
{
l=k+1;
}else{
r=k;//k和l近似相等,所以循环不成立
}
}
hash[l]=num[i].h;//每次循环,把前一项负值给hash&#x