1 条题解
-
0
「POI2011 R1」避雷针 Lightning Conductor 题解
题目解析
我们有一条街上的 座建筑物,高度分别为 。如果要在第 座建筑物上放置避雷针,其高度 必须满足对于所有建筑物 :
整理后得到:
$$p_i \geq h_j - h_i + \sqrt{|i-j|} \quad \text{对所有 } j $$因此对于每个 ,我们需要计算:
$$P_i = \max_{1 \leq j \leq n} \{ h_j - h_i + \sqrt{|i-j|} \} $$由于 必须是非负整数,最终答案就是 。
问题转化
定义:
$$f(i) = \max_{1 \leq j \leq n} \{ h_j + \sqrt{|i-j|} \} $$那么:
问题转化为:对于每个 ,计算 。
算法思路
关键观察
函数 具有决策单调性。这意味着:
如果对于位置 , 是最优决策点,那么对于位置 ,最优决策点 满足 。
分治优化
利用决策单调性,我们可以使用分治法来高效计算所有 :
-
分离绝对值:将问题分解为两个子问题:
- 左边:$f_L(i) = \max_{1 \leq j \leq i} \{ h_j + \sqrt{i-j} \}$
- 右边:$f_R(i) = \max_{i \leq j \leq n} \{ h_j + \sqrt{j-i} \}$
然后
-
分治求解:对于 ,我们递归处理:
- 在区间 上,已知最优决策点范围在
- 取中点 ,在 中找到 的最优决策点
- 递归处理 (决策点在 )和 (决策点在 )
-
复杂度分析:每个递归层总共扫描 个位置,共 层,总复杂度 。
解题过程
步骤1:预处理
- 读取建筑物高度数组
步骤2:计算左边贡献
- 使用分治法计算对于每个 ,
- 维护当前递归区间和对应的决策点范围
步骤3:计算右边贡献
- 同样使用分治法计算对于每个 ,
- 方法与左边对称
步骤4:合并结果
- 对于每个 ,
- ,确保非负
算法特点
- 时间复杂度:,适用于
- 空间复杂度:
- 核心技巧:利用决策单调性进行分治优化,避免了 的暴力计算
这种方法高效地解决了原本看似需要 时间的问题,是决策单调性优化的经典应用。
-
- 1
信息
- ID
- 3868
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者