zoukankan      html  css  js  c++  java
  • CDQ分治

    分治算法的基本思想是将一个规模为n的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.    --陈丹琦集训队论文
    例如归并排序
    复杂度分析(可是我并不会分析
    oT(n) = 2 * T(n / 2) + O(kn)=O(kn*logn)
    oT(n) = 2 * T(n / 2) + O(k) = O(kn)
    cdq分治是一种特殊的分治方法,初见于陈丹琦08年集训队论文
    适用条件:
    1.允许离线算法
    2.修改操作对答案的贡献相互独立,修改操作间互不影响
    模型:
    Solve(l, mid)
    (l, mid)对于(mid+1, r)的影响
    Solve(mid + 1, r)
    首先看一道三维偏序裸CDQ
    所以简单来说 cdq分治是把询问和修改一起操作,用[l,mid]中的修改更新[mid+1,r]中的询问。
     
    接下来稍微要转化一下的题
    二维前缀和+时间序+树状数组维护y
     
    这道题用到了cdq的常用处理方法 时间序因为对时间为i的询问有影响的修改的时间一定小于i,所以可以在时间序上进行分治。
     
    还是一道时间序的题,做法比较有趣
    时间序+树状数组维护max(x+y)
     
    用了时间维度的非典型CDQ
    bzoj 4137 http://www.cnblogs.com/lokiii/p/8125912.html(莫名插不进去链接
    用分治推掉外层线段树
     
    lazy:
    hdu 5127  还不会凸包
  • 相关阅读:
    java线程池及创建多少线程合适
    消息队列消息积压了怎么办?
    Redis线程模型
    redis单线程如何支持高并发
    基于redis实现分布式锁
    PHP面试总结
    【转】Redis入门
    面试常考之二叉树
    计算机网络之面试常考
    操作系统之面试常考
  • 原文地址:https://www.cnblogs.com/lokiii/p/8108265.html
Copyright © 2011-2022 走看看