可能是被卡精度了,典型情况是一个点和标准答案只差了一点儿,另一个点差了好几千。
维护凸包时(或者其他求斜率的时候)要注意两个点x坐标相同的情况
换long double,设eps,以及在浮点数比较的时候也要加上eps 虽然我也不知道为什么这样就能卡过去,教我
比如这样的
for(int i=l;i<=mid;++i){
while(L<R && getk(que[R],que[R-1])<getk(que[R-1],i)) R--;
que[++R]=i;
}
for(int i=mid+1;i<=r;++i){
while(L<R && getk(que[L],que[L+1])>-a[i].a/a[i].b) L++;
gmax(dp[a[i].id],a[que[L]].x*a[i].a+a[que[L]].y*a[i].b);
}
↓↓↓
for(int i=l;i<=mid;++i){
while(L<R && getk(que[R],que[R-1])-eps<getk(que[R-1],i)) R--;
que[++R]=i;
}
for(int i=mid+1;i<=r;++i){
while(L<R && getk(que[L],que[L+1])>-a[i].a/a[i].b) L++;
gmax(dp[a[i].id],a[que[L]].x*a[i].a+a[que[L]].y*a[i].b);
}