LGP5204口胡
作者:互联网
@CF1327F
最小值看着有点怪,先转化成最大值吧。。。反正没啥区别。。。
考虑把最大值相同的区间和限制为这个最大值的区间都拿出来。然后离散化。问题变为让所有区间都满足最值为 \(c\)。
考虑 DP。设 \(dp[n][k]\) 表示到序列上的第 \(n\) 个位置后,上一个 \(c\) 在第 \(k\) 个位置。
设 \(L[n]\) 表示右端点为 \(n\) 的区间中,左端点最靠右的那个的左端点。如果没有就为 \(0\)。
转移:
\[dp[n][k]=[L[n]\leq k]dp[n-1][k]\times(c-1) \]\[dp[n][n]=\sum_{i=1}^{n-1}dp[n-1][k] \]可以直接令 \(dp[n]\) 继承 \(dp[n-1]\),然后动态维护这个有值的区间。每次操作的时候只需要支持全局乘和单点加就行了。
可以通过打标记的方法将复杂度降低至期望 \(O(n)\),具体见代码。
标签:CF1327F,最大值,LGP5204,dp,端点,区间,DP 来源: https://www.cnblogs.com/lmpp/p/15985749.html