如果线段树端点值可以取负数,那么应该用$ mid = \left[ \frac{l+r-1}{2} \right] $计算中点(除法向0取整,可以直接用c++的整数除法)

也就是,如果 $\frac{l+r}{2} > 0$ 能平分就平分,否则左区间比右区间长度小1

如果 $\frac{l+r}{2} \le 0$ 能平分就平分,否则左区间比右区间长度多1

e.g.

比如 $l=-2$, $r=-1$

  1. $mid = \left[ \frac{l+r-1}{2} \right] = -2 $ 正常
  2. $mid = \left[ \frac{l+r}{2} \right] = -1 $ 死循环