题解:P11288 [COTS 2017] 模板 Z1
FstAutoMaton · · 题解
[COTS 2017] 模板 Z1
以前见过类似套路的题然而不会做了。。。还是太菜了。
这种涉及到区间 min/max 的数数题首先考虑简化成只有 dp,设
这个复杂度显然是不能接受的,考虑进行优化。发现转移的时候是实际上是要将 dp 做到
(如果不会上面这一段可以先去学一下 Intervals,或者可以根据下面那个写的比较详细的 dp 脑部一下)。
接着考虑这道题本身的做法。首先可以快速维护出每一个位置可以取到的上界,那么我们可以观察到一个性质:对于一个限制
考虑证明上面这个事情。对于上界小于
于是可以考虑把上界不同的位置和 dp。对于上界为
-
没有以该位置为右端点的限制。
那么此时可以任意填,所以把每一个位置都乘上
x ,然后对于f_{i,i} 求\sum_{j=0}^{i-1}f_{i-1,j} 更改即可。 -
有以该位置为右端点的限制。
设这些限制中左端点最大的位置为
pos ,那么0\sim pos-1 要被清0 ,而pos\sim i-1 全部乘上x ,f_{i,i} 依旧直接求前缀和即可。
上述操作可以写区间乘法区间求和线段树维护,总时间复杂度
code