CF578C题解

题面

Description:
定义一个长度为 \(n\) 的数列 \(a_i\) 的“不美好程度”为 $$\max_{1\leq l<r\leq n} {|\sum_{i=l}^r a_i|}$$
求一个实数 \(x\),使得数列 \(b_i=a_i-x\) 的“不美好程度”最小。输出最小值。
\(n\leq2\times10^5\)


我们先转化一下式子。
因为 \(|a|=\max\{a,-a\}\),所以 \(\max_{1\leq l<r\leq n} \{|\sum_{i=l}^r a_i|\}=\max\{\max_{1\leq l<r\leq n} \{\sum_{i=l}^r a_i\},\max_{1\leq l<r\leq n} \{-\sum_{i=l}^r a_i\}\}\)
这样我们就把求一个数列的“不美好程度”转化成求两次最大子段和。
因为我不会证明“不美好程度”与 \(x\) 的函数关系,所以拒绝使用三分法。但我们知道 \(x\) 的范围局限在 \([\min\{a_i\},\max\{a_i\}]\) 之间,这个区域很小,于是考虑使用随机化算法模拟退火。注意参数的掌握。

代码

posted @ 2022-06-05 12:42  1358id  阅读(28)  评论(0编辑  收藏  举报