信息
- ID
- 1574
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
令 dpi(x) 表示前 i 个位置合法且 Xi=x 的方案数,Si=∑xdpi(x)。
加入上界 Ai+1 后,有 dpi+1(x)=Si−dpi(x)(x≤Ai+1),其余位置为零。所有可能的 x 上,dpi(x) 始终是若干连续区间上的常值函数;每一步先把定义域截到 Ai+1,再对保留区间统一执行 y↦Si−y,若定义域变长,新增部分的值为 Si。
用栈记录这些常值段的长度和基准值,并用一个全局符号与偏移量懒惰表示所有段共同经历的仿射变换。定义域缩小时,每个段至多被弹出一次;变长时只增加一个段,因此总操作次数为 O(N)。同时维护各段值乘长度之和即可得到新的 Si=Ai+1Si−1−∑x≤Ai+1dpi(x)。
时间复杂度为 O(N),空间复杂度为 O(N)。