trivial分治算法

情到浓时终转凉″ 提交于 2020-02-03 02:37:15

按时间分治:

  1. CDQ分治
    解决大多可以归化为kk维偏序问题的离线算法。
    KK维偏序问题的bitsetbitset解法:
    在这里插入图片描述
    [已完成]例题1:CF 70 D ,支持动态加点的凸包问题,可以使用CDQ分治变成离线.
    [已完成]例题2:CF 848C, 设一段区间的价值为区间内每个出现过的数,最后一次出现的位置-第一次出现的位置之和。要求支持单点修改和区间查询。
    解法:把每个 ai 看作二元组 (i,prevai)(i,prev_{a_i}),则 aia_i 在区间内的贡献为 li,prevairiprevai\sum_{l≤i,prev_{a_i}≤r}i−prev_{a_i},中间的部分均消去,剩余的贡献恰为题目所求。因此,时间、iiprevaiprev_{a_i} 组成了三维数点问题的三个维度,套用 CDQ 分治解决。
    例题3:【UOJ#50】【UR #3】链式反应(分治FFT,动态规划)
  2. 线段树分治
    动态图连通性.
    对每个物品求不包含它的01背包.
    [已完成]【HNOI】城市建设:支持修改边权,求 MST 边权和.
    对于一段时间区间 [l,r],我们把这段区间中修改到的边称为 待修边,其余的边称为 固定边。
    solve(l,r,V,E)solve(l,r,V,E) 表示当前分治的时间区间为 (l,r)(l,r),缩点后的连通块集合为 VV,不确定是否会出现在 MST 中的固定边集合为EE。初始 V=1,2,,nE=V={1,2,…,n},E=\empty
    在我们递归到某个儿子前,只在当前节点的另一个儿子中修改的待修边会变为固定边,将它们加入 EE
    对于剩余的待修边,用它们尽可能的连接 VV 中的连通块;此时若存在两点 (u,v)(u,v) 尚未连通,那么,任何待修边都不可能使它们联通,可以直接用 E 中的边将这些连通块连起来,并缩点至任意两点可以通过待修边相连。
    由于待修边最多有 O(rl)O(r−l) 条,此时的 VV 大小也是 O(rl)O(r−l) 的。
    对于剩余的 EE 中的边,按权值排序后,用它们尽可能的连接 VV 中的连通块;此时若存在一条边的端点已经连通,则无论待修边的权值如何,这条边都不可能在 MST 中,可以直接从 EE 中删除。
    由于此时 V 大小已经为 O(rl)O(r−l)EE 中剩余的边最多保留一棵生成树,因此此后 4E$ 的大小也是 O(rl)O(r−l)
    我们发现,递归到任何一个节点时,耗费的时间都是 O(rl)O(r−l) 级别的,因此总复杂度为 O(nlog2n)O(nlog^2n)
  3. 二进制分组
    动态凸包,强制在线.
    [已完成]UOJ 191 UnknownUOJ\ 191\ Unknown
  4. 整体二分
    [已完成]【LG1527】[国家集训队]矩阵乘法
    CF 102354 B在这里插入图片描述
    调和级数枚举约数+整体二分+莫比乌斯反演。
  5. 带权⼆分/决策单调性
    a<b<c<da<b<c<d 如果 w(a,c)+w(b,d)w(a,c)+w(b,d)w(a,d)+w(b,c)w(a,d)+w(b,c) “不会更劣”,就称此类 dp 满足四边形不等式。满足四边形不等式的 dpdp 均具有决策单调性。(充分,但不必要)
    [已完成]CF 321E 有一个沿主对角线对称的非负方阵,把它的主对角线分成 k 块,每块的权值是对应子方阵的和。求最小代价。
    由于方阵非负,决策单调性显然。
    用分治处理决策单调性的方法可以做到O(nklogn)O(nk\log n)
    NOI 2009 诗人小G.
    CF 868F 将一个数列分成k段,每段的代价是相同的数字的对数。 求代价总和最⼩。
    给一个凸包,选 k 个点使得围成的面积最大。
    考虑枚举起点,可以带权二分+决策单调性 O(nlogwlogn)O(nlogwlogn)求出确定起点的答案,期望随机 nk\frac n k 次就可以得到最优答案。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!