1 条题解
-
0
题目翻译
有 座山峰,第 座高度为 。
若在第 座山峰建一个高度为 的灯塔,它能照亮第 座山峰当且仅当:要求对每座山峰 ,求能照亮所有其他山峰的最小灯塔高度 。
问题转化
由条件:
可得:
因此:
$$p_i = \max_{1 \le j \le N} \left( h_j + \sqrt{|i-j|} \right) - h_i $$
直接暴力的问题
直接对每个 枚举 是 的, 会超时。
优化思路
定义:
$$f(i) = \max_{j=1}^N \left( h_j + \sqrt{|i-j|} \right) $$那么 (因为 是非负整数,样例是向上取整)。
决策单调性
考虑函数 。
对于固定的 , 随 增大而缓慢增加( 增长越来越慢)。
这种形式的函数具有决策单调性:
即,如果定义 是使 最大的 ,那么 随着 增大而单调不减。
分治解法
我们可以用 分治优化 DP 的方法计算 :
- 先考虑 的部分:
$g_1(i) = \max_{j \le i} \left( h_j + \sqrt{i-j} \right)$ - 再考虑 的部分:
$g_2(i) = \max_{j \ge i} \left( h_j + \sqrt{j-i} \right)$ - 最后
这两部分是对称的,可以用同样的分治方法解决。
分治过程
对于 :
- 定义
solve(l, r, L, R)表示计算区间 的 ,已知最优决策点在 。 - 取 ,在 中找到最优决策点 。
- 递归
solve(l, mid-1, L, k)和solve(mid+1, r, k, R)。
同理处理 (方向相反)。
复杂度
每层分治扫描的总长度是 ,共 层,所以总复杂度 。
- 先考虑 的部分:
- 1
信息
- ID
- 4779
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者