Warning: session_start(): open(/tmp/sess_74ca4afa071e2479d21c08500a0753e9, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: mkdir(): No space left on device in /data/wiki/lib/plugins/dw2pdf/vendor/mpdf/mpdf/src/Cache.php on line 19
Temporary files directory "/data/wiki/data/tmp/dwpdf/687/" is not writable

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:legal_string:jxm2001:cdq分治 [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:legal_string:jxm2001:cdq分治

这是本文档旧的修订版!


CDQ 分治

算法简介

一种离线处理多维偏序问题的算法。

算法模板

题意

三维空间中给定 $n$ 个点,编号为 $1 \sim n$。定义 $f[i]$ 表示恰好有 $i$ 个元素满足 $x_i\le x_j,y_i\le y_j,z_i\le z_j$ 且 $i\ne j$ 的 $j$ 的个数。

要求输出 $f[0 \sim n-1]$。

题解

先考虑所有元素互异的情况。

先将第一维作为第一关键字,第二维作为第二关键字,第三维作为第三关键字对序列进行第一轮排序。

排序后将第二维作为第一关键字,第三维作为第二关键字对序列进行归并排序,利用分治过程计算答案贡献。

分治过程中受第一轮排序结果影响,只有左区间元素能为右区间元素做贡献,而右区间不能为左区间做贡献。

查看代码

查看代码

 

算法练习

习题一

题意

题解

2020-2021/teams/legal_string/jxm2001/cdq分治.1595940231.txt.gz · 最后更改: 2020/07/28 20:43 由 jxm2001