- ACM
123
- @ 2025-10-1 17:56:46
设前缀和 ,把一段 的代价改写为
$$\sqrt{\sum_{k=j+1}^i a_k-\tfrac12 a_i} =\sqrt{(S_i-\tfrac12 a_i)-S_j} =\sqrt{X_i-S_j}, \quad X_i:=S_i-\tfrac12 a_i. $$于是
$$dp[i]=\min_{0\le j<i}\bigl(dp[j]+\sqrt{X_i-S_j}\bigr),\quad dp[0]=0. $$由于 ,有
因此查询点 随 严格递增。把每个候选 看成函数
这些函数两两至多相交一次。
维护 lower envelope:按 递增把 依次加入,给每条新函数与当前尾部函数计算交点 ,把它当作新函数在下包络上的有效区间右端点。由于查询点 单调递增,查询时只需从队尾弹出所有右端点 的过期候选,当前队尾即为最优 ,从而得到 。
设与尾部 对比的新函数为 ,记
则有三种情况:
- 若 ,新函数 在其定义域左端起就不劣,应弹出 并继续与更旧者比;
- 若 ,两者无有效交点, 永不优,直接丢弃 ;
- 否则交点存在,其位置可由 化简得到$$x^*=S_p+\Bigl(\frac{\Delta+\frac d\Delta}{2}\Bigr)^2. $$若 不大于当前尾部记录的右端点,则尾部无生存区间,需要继续弹出;否则把 连同右端点 入队。这样维护的分界点严格单调,因此每个候选最多入队出队一次,均摊查询 ,总体 。
0 条评论
目前还没有评论...