CDQ分治学习

声明:此算法不适用于强制在线题。

一切是从归并排序求逆序对开始的。
我们先假装已经分治完左边和右边,又回溯到了某一处
CDQ分治学习CDQ分治学习
现在我们要合并了
CDQ分治学习
左边和右边的答案已经算完
考虑跨越mid的逆序对的个数
注意到逆序对的定义, i<jai>aj
首先 i<j 是肯定可以保证的
所以需要考虑的仅仅是  ai>aj
做到这一点应该不难。

接下来引出简单又自然的CDQ分治

刚刚的归并排序求逆序对。就是一种cdq分治的应用。
cdq分治
考虑把区间分成左右两边分治
并且考虑左边对于右边的影响。
CDQ分治学习
假如有一个有修改有查询的操作序列。
要用CDQ分治处理
就可以分成左右两部分。
CDQ分治学习
分治完左边,把左边对右边产生影响的东西单独抽出来,计算对右边的贡献。
CDQ分治学习
再分治右边CDQ分治学习

CDQ分治的应用

二维偏序

给定N个有序数对(a,b),求对于每个(a,b),满足a0< a且b0< b的有序数对(a0,b0)有多少个
这类问题通常是先把(a,b)按a排好序。以把问题进行问题降维。
接着就像归并排序求逆序对一样,通过不断对b归并来计算答案。

三维偏序

给定N个有序数对(a,b,c)求对于每个 (a,b,c),满足a0 < a且b0 < b且c0 < c的有序数对(a0,b0)有多少个。
是不是特别像二维偏序?
通常这类问题是一个二维偏序套线段树实现的。

四维以上的本博客均不介绍。

相关文章:

  • 2021-09-24
  • 2021-10-17
  • 2021-04-22
  • 2021-04-05
  • 2021-10-04
  • 2021-10-11
  • 2021-10-20
  • 2022-01-21
猜你喜欢
  • 2018-12-06
  • 2018-12-04
  • 2021-11-12
  • 2021-08-12
  • 2021-06-14
  • 2019-01-10
  • 2021-07-08
相关资源
相似解决方案