题目大意:对于一个序列,定义它的poorness为所有元素的和的绝对值,weakness为它所有子段的poorness的最大值。现给出一个序列a,求使序列$a_1-x,a_2-x,...,a_n-x$的poorness最小的x。
令$s\left(i,j\right)=\sum_{k=i}^j\left(a_k-x\right)$。
$weakness\left(a\right)$
$=\max_{1\leq i\leq j\leq n}\left|s\left(i,j\right)\right|$
$=\max_{1\leq i\leq j\leq n}\max\left(+s\left(i,j\right),-s\left(i,j\right)\right)$
$=\max\left(\max_{1\leq i\leq j\leq n}+s\left(i,j\right),\max_{1\leq i\leq j\leq n}-s\left(i,j\right)\right)$
显然max的前半部分是单调递减的,而后半部分是单调递增的,用二分或三分找到他们相等时x的值就是最优解。
代码在此。