分治是将复杂的问题拆成多个(一般是两个)相似的子问题,直到最后分成的子问题可以简单求解,然后通过子问题的答案合并出大问题的答案。
仿照分治的结构可以衍生出一大堆静态分治算法。
普通分治
uoj979. 决战库尔斯克
首先排序去重。如果选择钦定最小值,发现需要枚举最小值的倍数然后在一段中二分出最大值,但是值域很大,寄了。
那么钦定最大值,最小值可以选择严格比其一半大的,那么答案是差。
考虑小于的部分对大于的部分的影响。发现需要 ,而这一部分的 就只有至多两端倍数了,直接二分。
于是分治下去即可,,二分跑不满能过。代码。