专栏文章
题解:P11288 [COTS 2017] 模板 Z1
P11288题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minlk47f
- 此快照首次捕获于
- 2025/12/02 04:23 3 个月前
- 此快照最后确认于
- 2025/12/02 04:23 3 个月前
[COTS 2017] 模板 Z1
以前见过类似套路的题然而不会做了。。。还是太菜了。
这种涉及到区间
min/max 的数数题首先考虑简化成只有 和 的情况(即 ),且保证限制的 。此时有个很显然的 dp,设 表示前 个位置,上一个为 的位置在 ,转移时考虑 这一位放不放 ,直接转移即可,时间复杂度 。这个复杂度显然是不能接受的,考虑进行优化。发现转移的时候是实际上是要将 为一段前缀的状态清成 (因为这些位置不满足区间内一定要有 的限制),然后对于一个前缀求和,对 单点更改,可以用线段树维护整体
dp 做到 。(如果不会上面这一段可以先去学一下 Intervals,或者可以根据下面那个写的比较详细的
dp 脑部一下)。接着考虑这道题本身的做法。首先可以快速维护出每一个位置可以取到的上界,那么我们可以观察到一个性质:对于一个限制 ,所有满足 的 可填到的上界一定为 。
考虑证明上面这个事情。对于上界小于 的位置其不能填 ,而上界大于 的位置一定不会被一个限制为 的区间覆盖,所以说上述事情成立。
于是可以考虑把上界不同的位置和 不同的限制分开考虑。对于一个枚举的上界 ,考虑进行和前面简化版问题类似的
dp。对于上界为 的一个位置 分两种情况:-
没有以该位置为右端点的限制。那么此时可以任意填,所以把每一个位置都乘上 ,然后对于 求 更改即可。
-
有以该位置为右端点的限制。设这些限制中左端点最大的位置为 ,那么 要被清 ,而 全部乘上 , 依旧直接求前缀和即可。
上述操作可以写区间乘法区间求和线段树维护,总时间复杂度 。代码很长但并不难写,想清楚之后还是没什么问题的。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...