题解:P15442 [蓝桥杯 2025 国研究生组] 山峰子序列
MoCaRabbit · · 题解
这不就是给最长上升子序列板子题套了个壳就搬过来了吗?
子序列问题我们一般的状态设计第一维都是子序列结尾的位置。
第二维我们可以考虑这个子序列有上升和下降两种走向,直接设 0/1 状态。
第三维,我们发现同一组上升和下降的子序列长度是相同的,于是第三维我们直接来维护上升和下降的长度。
设第三维记录的长度为
dp 数组的值就设为长度喽。
此时如下
-
扩展上升段,
dp_{i,0,j}=\max_{0\le k<i,a_k<a_i} dp_{k,0,j-1}+1 。 -
扩展下降段,
dp_{i,1,j}=\max_{0\le k<i,a_k>a_i} dp_{k,1,j+1}+1 。 -
上升转下降,
dp_{i,1,j}=dp_{i,0,j} 。 -
下降转上升,
dp_{i,0,0}=dp_{i,1,0} 。
这就可以
接着考虑优化,发现第
前两种是什么经典问题啊,二维偏序的 dp 啊。
此时你发现
所以为何满足
可以直接树状数组,查询后缀的话你就把
值域是
时间复杂度
解法全都喂给你了,自己去写代码吧。