题解:AT_awtf2025_b Movies
首先如果集合确定,有一个简单的贪心做法,把所有集合按照右端点升序排序,右端点相同按照左端点升序排序,对于当前考虑的区间
然后就是这种题的常规想法,拆贡献,但由于各种区间、天之间互相纠缠、互相影响,不好算有多少种集合使得某一天一定看电影。但是观察贪心过程可以注意到,“极长区间”很有意义,也就是说枚举极长的看电影连续段
但是直接考虑极长连续段,也不好算,继续寻找性质。如果我们枚举的极长区间是
于是乎,设
考虑怎么求
当加入区间
- 不选择。这时候直接
f_{i, l, r} \gets f_{i - 1, l, r} 。 - 选择。
- 当
[L, R] 被[l, r] 包含的时候,选择这个区间对于[l, r] 没有影响,所以f_{i, l, r} \gets f_{i - 1, l, r} 。 - 我们可以让
[L, R] 单开一个极长区间,也就是< i 的区间都不选,只选i ,所以f_{i, L, L} \gets 1 。 - 如果
L = l ,那么把[L, R] 这个区间选在[L + 1, r] 上的时候,可以让极长区间向左拓展,所以f_{i, l, r} \gets f_{i - 1, l + 1, r} 。 - 如果
L \in [l, r] 且R \ge r ,那么根据贪心过程,可以让极长区间向右拓展,所以f_{i, l, r} \gets f_{i - 1, l, r - 1} 。 - 还有一种情况,加入了
[L, R] 之后让两个极长区间合并了。枚举k \in [L, R] 表示[L, R] 使得位置k 看电影了,那么区间分裂成了[l, k - 1] 和[k + 1, r] ,直接f_{i, l, r} \gets f_{i - 1, l, k - 1} \times f_{i - 1, k + 1, r} 。这个转移还需要满足条件l \le L 。
- 当
算出