[Procedure #1] Cyaneous Rain

Thoughts Memo

主要问题

  1. 思维的连贯性不足,这是由于缺乏思考方向的感知所导致的

  2. 不习惯进行定量的思考,缺乏自动性

  3. 思维过程不清晰,这是第一点导致的

我们可以用下面的书写格式来理清思路。

[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]

posted @ 2025-08-18 21:35  haozexu  阅读(9)  评论(0)    收藏  举报