1 条题解
-
0
「COI 2025」Bolivija 题解
核心思路
1. 问题转化
我们有一个长度为 (奇数)的山脉序列 ,中心位置 是最高峰。
选择两个参数 ,照片包含所有高度在区间 内的山体部分,且必须关于中心对称。关键观察:对于照片对称,当且仅当对于每个对称位置对 :
- 要么两个位置的山都在 内
- 要么两个位置的山都不在 内
2. 对称对分析
定义对称对 ,其中 。
对于每个对称对,设两座山的高度为 和 (假设 )。对于区间 ,该对称对破坏对称性的情况是:
- 且 或 (一个在区间内,一个在区间外)
3. 区间对 的约束
实际上, 必须满足:对于每个对称对 (其中 ):
- 不能出现 且 的情况?
让我们重新思考。
更准确地说,对于对称对 :
- 如果 :两座山都不在区间内 ✅
- 如果 :两座山都不在区间内 ✅
- 如果 且 :两座山都在区间内 ✅
- 如果 且 :只有较矮山在区间内 ❌
- 如果 且 :只有较高山在区间内 ❌
因此,破坏对称性的情况是:
- 且
- 且
4. 平面点对计数
将 看作二维平面上的点,其中 。
每个对称对 禁止了平面上的一个L形区域:
- 矩形 (左下角在 ,右上角在 )
- 矩形
5. 容斥计数
初始所有点对数为 (因为 ,且 )。
对于每个对称对,需要减去它禁止的区域面积。但多个对称对的禁止区域可能重叠,需要容斥。
更简单的方法:考虑每个 值,计算可选的 数量。
对于固定的 , 必须满足:
- 对于每个对称对 :
- 不能有 且
- 不能有 且
这等价于: 必须 且 。
6. 高效算法
对于每个 ,定义:
- (如果存在这样的对称对)
- (如果存在这样的对称对)
那么对于给定的 ,可选的 范围是:
- 如果存在 ,则 必须 且
- 否则 可以是 到 的任意值
7. 数据结构实现
使用 Fenwick 树或线段树维护:
- 每个对称对 的影响
- 支持区间更新和查询
对于每个对称对,它在 区间 内产生约束:
- 要求
因此,对于每个 , 的最小值 $minA[B] = \max\{a_i + 1 : B > a_i \text{ 且 } B \leq b_i\}$
答案 =
8. 动态更新
当某个位置 的高度改变时,影响对称对 :
- 移除旧对称对的约束
- 添加新对称对的约束
使用数据结构维护所有对称对的 ,支持:
- 区间更新 数组
- 快速查询总和
算法实现
复杂度分析
- 预处理:
- 每次更新:
- 总复杂度:
- 1
信息
- ID
- 4702
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者