[POI2011]Lightning Conductor

Description

Luogu3515

Solution

据说这是板子题……

题目让求最小的\(p_i\)满足\(p_i\ge a_j + \sqrt{|j-i|} - a_i\), 也即\(p_i=\max_{j=1}^n(a_j+\sqrt{|j-i|})-a_i\)。绝对值比较难以处理,所以把绝对值拆开:

\[p_i = \max(\max_{j=1}^i \{ a_j+\sqrt{i-j}\}, \max_{j=i+1}^n \{a_j+\sqrt{j-i}\}) - a_i \]

显然前后可以分开算。只看前面。

我们把\(a_j+\sqrt{i-j}\)看作一个关于\(i\)函数,显然,这个函数是单调的。我们就只需要维护当前的所有函数,然后取在\(i\)处的最大值就行了。当然是要用单调队列的,维护相邻两个函数的交点,然后就可以轻松的判断\(i\)要从哪个位置转移。

总的来说,我们要维护一些函数,它们未来能够成为所有函数的最大值,这可以用单调队列维护。

Code

posted @ 2018-10-22 09:09  wyxwyx  阅读(130)  评论(0编辑  收藏  举报