其他分享
首页 > 其他分享> > LGP5204口胡

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