信息
- ID
- 8835
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者
差分更新示例
当 bi≥k。此时对于前半段的影响不会在 1 的左侧。
| l | l+1 | … | bi | ||
|---|---|---|---|---|---|
| 原序列 | 1 | 2 | … | k | |
| 一次差分 | 1 | 1 | 1 | −1 | |
| 二次差分 | 1 | 0 | 0 | −2 |
因此需要更新:
当 bi<k。此时对于前半段的影响会在 a1 的左侧产生。
因此 a1←a1+k−(bi−1)。例如当 k=5,bi=3 时,a1←a1+5−2=3。
| 1 | 2 | … | bi | ||
|---|---|---|---|---|---|
| 原序列 | k−(bi−1) | k−(bi−2) | … | k | |
| 一次差分 | k−(bi−1) | 1 | 1 | −1 | |
| 二次差分 | k−(bi−1) | 1−(k−(bi−1)) | 0 | −2 |
因此需要更新:
当 bi+k≤n+1。此时对于后半段的影响不会在 n 的右侧。
随便举个例子就可以发现,更新的位置就是 cbi+k+1←cbi+k+1+1。
当 bi+k>n+1。此时对于后半段的影响会在 n 的右侧。但我们只需要维护 a1∼an 的变化,因此这部分完全不用分析。