「codechef - KILLER」Painting Tree

link。


\(x\) 为链的最高点,\(u\) 为链的最低点,则链的代价可记作 \(a_u \times dep^2_x + b_u \times dep_x + c_u\)

其中,\(a_u = C_u, b_u = 2C_u^2 + C_u = 2a_u^2 + a_u\),剩下的常数项 \(c_u\) 就不写了,不太重要。

我们尝试说明上式关于 \(dep_x\) 决策单调,即证明如下命题:

对于 \(c_1 \geq c_2\),若 \(a_1x^2 + b_1x + c_1 < a_2x^2 + b_2x + c_2 (x > 0)\),其中 \(b_1 = 2a_1^2 + a_1, b_2 = 2a_2^2 + a_2\)

则对于任意 \(\Delta x \geq 0\),都有 \(a_1(x + \Delta x)^2 + b_1(x + \Delta x) + c_1 < a_2(x + \Delta x)^2 + b_2(x + \Delta x) + c_2\)

证明如下:

\(\delta_1 = (a_2x^2 + b_2x + c_2) - (a_1x^2 + b_1x + c_1) > 0\)

\(\delta_2 = (a_2x + b_2) - (a_1x + b_1) > (c_1 - c_2)/x \geq 0\)

\(\delta = (a_2(x+\Delta x)^2 + b_2(x+\Delta x) + c_2) - (a_1(x+\Delta x)^2 + b_1(x+\Delta x) + c_1)\)

则:

\[\begin{aligned} \delta &= \delta_1 + \delta_2\times\Delta x + (a_2 - a_1)\times (\Delta x^2 + \Delta x) \\ &> (a_2 - a_1)\times (\Delta x^2 + \Delta x) \end{aligned} \]

由于 \(\delta_2 > 0\),将 \(b\) 代换成 \(a\) 可得 \((a_2 - a_1)(x+2a_1+2a_2+1) > 0\),又有 \(a_1, a_2 \geq 0\),故 \(a_2 > a_1\)

又因 \(\Delta x > 0\) 时有 \((\Delta x^2 + \Delta x) > 0\)。由此,\(\delta > 0\)

之后可以考虑用李超线段树维护,以 \(dep\) 为横坐标。

使用线段树合并即可快速维护子树内决策点,其他链的贡献通过打 tag 实现。

posted @ 2019-12-18 20:21  Tiw_Air_OAO  阅读(343)  评论(2编辑  收藏  举报