2 1 -4 -3 1 1 2 1
能把我的代码卡成死循环,因为我的二分是错的:
while(l<r){ mid=((0ll+l)+r)/2; if(cnt(L,R,mid)>=k) r=mid; else l=mid+1; }
C++ 中的除法 / 是向 000 取整,有 (-7)/2==3,我就寄了。
/
(-7)/2==3
把 /2 换成 >>1 就是对的,因为 >>1 相当于时向下取整的 /2。
/2
>>1
但是这样写能过。原因是数据中根本没有负数,
请求加强数据或者修改数据范围。