QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: nullptr_qwq

Posted at:

Last updated:

Back to Problem

sol

$O(n^2)$ 做法:固定 $xl$,然后对于 $xr$ 从 $n$ 开始倒着删,那么纵坐标的区间上就会初始有 $xl\sim n$ 的所有点作为障碍,那么不包含障碍的都可以贡献入答案。倒着删每次会删除一个障碍从而合并两侧的区间,链表求出即可,求出当前不包含障碍的极大区间中最大的 $\sum w_i$ 即可。

对横轴分治,考虑 $xl\leq mid\leq xr-1$ 的所有区间,用上面的做法两侧求出 $O(len)$ 个支配对 $(h_1,l_1,r_1),(h_2,l_2,r_2)$,其中 $h$ 就是分治中心到对应列的 $v$ 之和。现在需要从两侧各自取一个,最大化 $h_1+h_2+\sum_{i\in[l_1,r_1]\cap[l_2,r_2]}w_i$。

如果 $[l_1,r_1]\subseteq[l_2,r_2]$ 或者反过来有包含关系就直接二维偏序。否则不妨设 $l_1\leq l_2\leq r_1\leq r_2$,直接对这个扫描线,当扫到 $l_1$ 时在 $r_1$ 加入 $h_1$ 的贡献了,扫到 $r_1$ 撤销。扫到 $l_2$ 时查询 $l_2\leq r\leq r_2$ 的最大的 $h_r+prew_r$。容易线段树维护。

时间复杂度 $O(n\log^2n)$。

upd:两个区间至少一个经过对应的带权中心,所以只需要做一次,复杂度 1log。

Comments

No comments yet.