[Procedure #1] Cyaneous Rain
Thoughts Memo
主要问题
思维的连贯性不足,这是由于缺乏思考方向的感知所导致的
不习惯进行定量的思考,缺乏自动性
思维过程不清晰,这是第一点导致的
我们可以用下面的书写格式来理清思路。
[Procedure #1] Cyaneous Rain
[Replay]
做出一次决策之后,序列相当于分裂成了两半,这两个问题相对独立,可以考虑区间 DP,是经典的枚举中间断点的区间 DP。
[Check Point 1] 朴素区间 DP O(n^3)
这个看起来很像是能用四边形不等式优化的样子,但是他是反的,是求 \(\max\),但是区间包含单调性是正的,这个不适用于四边形不等式优化,但是我们不妨打出最优决策点来看一看有什么规律。
[Note] 确实打了 [Appendices] gen1.cpp,test4.cpp
我们可以发现一个规律,就是总是只会以最左边和最右边的点作为决策点。[Lemma 1]
[Proof 1]
对于区间 \([l,r]\),设其分界点(即,第一个操作的点)为 \(x\),设 \([l,x),(x,r]\) 中的这两个分别为 \(p,q\)。
分类讨论可知,操作序列 \((p,x,q),(q,x,p)\) 中必有一个比 \((x,p,q)\) 优。递归地,可以说明总是先操作最左边或者最右边的点。
[Check Point 2] 优化的区间 DP - 利用性质 O(n^2)
那么决策方案就被转化成,决策一个序列 LRLLRRLRL 这样。如果确定了最后操作的位置,那么实际上有几个 L 有几个 R 是确定的,现在的问题就是,以何种顺序将 L,R 归并。事实上,一个 L 或 R 操作对答案的贡献是与它在第几个操作是有关的,就是,以第 \(i\) 个 L 为例,如果他被插入在 \(x\) 这个位置,那么它对答案的贡献就是 [Track Lost] \((a_i-a_{i-1})x\),R 同理。
考虑调整法,对于 LRRRRR,如果这个 L 提升 5 位带来的收益比这 5 个 R 全都后退一位带来的损失要大,那么就应该提升。由于 L 内部顺序必须保持,所以可以看作调整一个 L,更靠后的 L 都必须至少被调到那里。
[Note] 此处玩一下
观察到,令第 \(i\) 个 L 对应的长度 \(l_i=a_i-a_{i-1}\),\(r_i\) 同理,如果 \(l,r\) 都是递增的,直接合并成有序序列即可。如果 \(l_i>l_{i+1}\),那么由于 L 的顺序不能变,那么 \(l_i\) 和 \(l_{i+1}\) 会始终挨在一起,\(l_{i+1}\) 能往前调整的话,\(l_{i}\) 显然也能。总之可以通过 [Proof 1] 类似的方法证明,这两个应该挨在一起。[Lemma 2]
[Check Point 3]
那么,我们将其合并成一个就是很自然的思路。怎么等价合并呢?都换成 \(l_i,l_{i+1}\) 的平均数即可。如此不断操作,直至序列单调,套用有序序列做法即可。
[Check Point 4] Final Implement
我们顺序枚举最后操作的位置,然后左侧 \(l\) 容易维护,我们用单调栈,维护值单调的连续段,更改一个之后动态在平衡树里面插入删除并维护答案。但是右边呢?我们需要一步一步撤销,但是总操作次数是 \(O(n)\),那么撤销所需的复杂度也是 \(O(n)\),可以维护。
[Finish]
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/19045531

浙公网安备 33010602011771号