分治是将复杂的问题拆成多个(一般是两个)相似的子问题,直到最后分成的子问题可以简单求解,然后通过子问题的答案合并出大问题的答案。

仿照分治的结构可以衍生出一大堆静态分治算法。

普通分治

uoj979. 决战库尔斯克

Portal.

首先排序去重。如果选择钦定最小值,发现需要枚举最小值的倍数然后在一段中二分出最大值,但是值域很大,寄了。

那么钦定最大值,最小值可以选择严格比其一半大的,那么答案是差。

考虑小于的部分对大于的部分的影响。发现需要 ai1>aramida_i - 1 > a_r - a_{mid},而这一部分的 aia_i 就只有至多两端倍数了,直接二分。

于是分治下去即可,O(nlogVlogn)O(n\log V\log n),二分跑不满能过。代码

二维分治


Nothing built can last forever.
本站由 iznomia 使用 Stellar 1.30.4 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。