推荐博客 :https://blog.csdn.net/wu_tongtong/article/details/78785836

      https://www.cnblogs.com/mlystdcall/p/6219421.html

其实可以先引一下偏序

一维偏序 : 给定 n 个数字,求比某一个数字小的个数

  很简单的问题,我们只需要排个序就可以了

二维偏序 : 给定 n 个二元组(x, y), 求 x1 <= x && y1 <= y 的个数

  我们可以先对所有数的 x 进行排序,对另外一维用一个树状数组去维护就可以了

三维偏序 : 给定 n 个三元组 (x, y, z) 求 x1 <= x && y1 <= y && z1 <= z 的个数

  我们仍然可以先对所有数的 x 进行排序,对第二个维度用 CDQ 分治, 对第三个维度再用树状数组去维护

  注意,每次使用完树状数组要把树状数组清零 !!!

基本的CDQ模型是这样的:

void CDQ(int l, int r){
if (l == r) return; int mid = (l+r)>>1;
CDQ(l, mid);
CDQ(mid+1, r); int p1 = l, p2 = mid+1;
int num = 0;
for(int i = l; i <= r; i++){
if (p1<=mid && (p2 > r || arr[p1].y <= arr[p2].y)){
add(arr[p1].z, arr[p1].cnt);
f[num++] = arr[p1++];
}
else {
int num2 = query(arr[p2].z);
arr[p2].num += num2;
f[num++] = arr[p2++];
}
} num = 0;
for(int i = l; i <= r; i++) {
if (i <= mid) add(arr[i].z, -arr[i].cnt);
arr[i] = f[num++];
}
}

CDQ 入门的更多相关文章

  1. P3806 【模板】点分治1(CDQ分治)

    题目链接:https://www.luogu.org/problemnew/show/P3806 题目大意:中文题目 具体思路:直接dfs好像会超时,然后我们就开始想优化的方法,然后就是一个CDQ入门 ...

  2. 【ACdream】1157 Segments cdq分治

    Segments   Problem Description 由3钟类型操作:1)D L R(1 <= L <= R <= 1000000000) 增加一条线段[L,R]2)C i ...

  3. bzoj1176: [Balkan2007]Mokia cdq

    链接 bzoj 思路 cdq入门题,拆成4个矩阵,然后cdq. 代码 /************************************************************** P ...

  4. 解题:洛谷4721 [模板]分治FFT

    题面 这是CDQ入门题,不要被题目名骗了,这核心根本不在不在FFT上啊=.= 因为后面的项的计算依赖于前面的项,不能直接FFT.所以用CDQ的思想,算出前面然后考虑给后面的贡献 #include< ...

  5. COGS 577 蝗灾 [CDQ分治入门题]

    题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...

  6. CDQ分治入门 + 例题 Arnooks's Defensive Line [Uva live 5871]

    CDQ分治入门 简介 CDQ分治是一种特别的分治方法,它由CDQ(陈丹琦)神犇于09国家集训队作业中首次提出,因此得名.CDQ分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...

  7. bzoj3262 陌上花开 cdq分治(入门)

    题目传送门 思路:cdq分治处理偏序关系的模板题,主要就是学cdq分治吧,还在入门中. 代码其实也很好理解,记得树状数组操作的上限是 z的最大值,不是n的最大值,这个细节wa了好久. #include ...

  8. cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序

    /* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid, ...

  9. cdq分治入门and持续学习orz

    感觉cdq分治是一个很有趣的算法 能将很多需要套数据结构的题通过离线来做 目前的一些微小的理解 在一般情况下 就像求三维偏序xyz 就可以先对x排序 然后分治 1 cdq_x(L,M) ; 2 提取出 ...

随机推荐

  1. H5 拖拽元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 原 在windows上创建文件名以“.”开头的文件

    在实际项目开发中,我们会经常遇到以”.”开头的配置文件.例如我们如果需要通过配置文件给npm更换源就需要更改.npmrc文件,然而还有很多友友还不清楚如何创建一个类似的文件,今天就和大家分享下这个小技 ...

  3. 在后台管理系统中引入富文本编辑器 (vue-quill-editor)

    在admin系统中引入富文本编辑器 (vue-quill-editor) 由于公司项目的需求,内容需要更新,那么自然需要admin后台来上传内容,在苦苦寻觅了N个编辑器之后,终于找到了一个比较容易使用 ...

  4. Codeforces Round #564 (Div. 2)

    传送门 参考资料 [1]: the Chinese Editoria A. Nauuo and Votes •题意 x个人投赞同票,y人投反对票,z人不确定: 这 z 个人由你来决定是投赞同票还是反对 ...

  5. 浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

    * IE浏览器的内核Trident. Mozilla的Gecko.google的WebKit.Opera内核Presto: * png24为的图片在iE6浏览器上出现背景,解决方案是做成PNG8. * ...

  6. Checkpoint checkup中文报告模板使用

    步骤: Step1:下载中文版语言包和字体 https://supportcenter.checkpoint.com/supportcenter/portal?action=portlets.DCFi ...

  7. JNDI数据源的使用

    有时候我们数据库的连接会使用jndi的方式 try { InitialContext ic = new InitialContext(); dataSource = (DataSource) ic.l ...

  8. java_学生成绩管理系统

    //信1805-2 20183670 王云鹏 package student; import java.util.Scanner; public class ScoreManagement { sta ...

  9. redis 的持久化方式

    redis 持久化的两种方式 RDB:RDB 持久化机制,是对 redis 中的数据执行周期性的持久化. AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件 ...

  10. The first day of Crawler learning

    使用BeautifulSoup解析网页 Soup = BeautifulSoup(urlopen(html),'lxml') Soup为汤,html为食材,lxml为菜谱 from bs4 impor ...