CDQ 入门
推荐博客 :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 入门的更多相关文章
- P3806 【模板】点分治1(CDQ分治)
题目链接:https://www.luogu.org/problemnew/show/P3806 题目大意:中文题目 具体思路:直接dfs好像会超时,然后我们就开始想优化的方法,然后就是一个CDQ入门 ...
- 【ACdream】1157 Segments cdq分治
Segments Problem Description 由3钟类型操作:1)D L R(1 <= L <= R <= 1000000000) 增加一条线段[L,R]2)C i ...
- bzoj1176: [Balkan2007]Mokia cdq
链接 bzoj 思路 cdq入门题,拆成4个矩阵,然后cdq. 代码 /************************************************************** P ...
- 解题:洛谷4721 [模板]分治FFT
题面 这是CDQ入门题,不要被题目名骗了,这核心根本不在不在FFT上啊=.= 因为后面的项的计算依赖于前面的项,不能直接FFT.所以用CDQ的思想,算出前面然后考虑给后面的贡献 #include< ...
- COGS 577 蝗灾 [CDQ分治入门题]
题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...
- CDQ分治入门 + 例题 Arnooks's Defensive Line [Uva live 5871]
CDQ分治入门 简介 CDQ分治是一种特别的分治方法,它由CDQ(陈丹琦)神犇于09国家集训队作业中首次提出,因此得名.CDQ分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某 ...
- bzoj3262 陌上花开 cdq分治(入门)
题目传送门 思路:cdq分治处理偏序关系的模板题,主要就是学cdq分治吧,还在入门中. 代码其实也很好理解,记得树状数组操作的上限是 z的最大值,不是n的最大值,这个细节wa了好久. #include ...
- cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序
/* CDQ分治的对象是时间. 即对于一个时间段[L, R],我们取mid = (L + R) / 2. 分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid, ...
- cdq分治入门and持续学习orz
感觉cdq分治是一个很有趣的算法 能将很多需要套数据结构的题通过离线来做 目前的一些微小的理解 在一般情况下 就像求三维偏序xyz 就可以先对x排序 然后分治 1 cdq_x(L,M) ; 2 提取出 ...
随机推荐
- H3C 静态聚合配置
- promise 讲解
Promise的出现 解决了 js 回调地狱得问题 回调地狱图 Promise解决回调地狱 是不是美观多了.. 实例化Promise时传入方法里的两个参数 resolve(成功的回调)和reject ...
- 2018-8-13-WPF-使用-Edge-浏览器
title author date CreateTime categories WPF 使用 Edge 浏览器 lindexi 2018-8-13 15:33:5 +0800 2018-06-01 1 ...
- luoguP2679 子串
luoguP2679 子串 个人感觉\(noip\)系列中挺好的一道DP题目. 题面有点难理解. 我们设\(f_{i,j,k,0/1}\)表示\(A\)串前\(i\)个字符,匹配\(B\)串前\(j\ ...
- 2018-8-14-resharper-自定义代码片
title author date CreateTime categories resharper 自定义代码片 lindexi 2018-08-14 17:34:51 +0800 2018-2-13 ...
- 螺旋矩阵O(1)根据坐标求值
传送门 洛谷2239 •题意 从矩阵的左上角(第11行第11列)出发,初始时向右移动: 如果前方是未曾经过的格子,则继续前进,否则右转: 重复上述操作直至经过矩阵中所有格子. 根据经过顺序,在格子中依 ...
- 【Docker】Ubuntu16.04将Docker升级至最新版
1.使用curl升级到最新版 curl -fsSL https://get.docker.com/ | sh 2.重启Docker sudo systemctl restart docker 3.设置 ...
- POJ 3111 K Best 最大化平均值 [二分]
1.题意:给一共N个物品,每个物品有重量W,价值V,要你选出K个出来,使得他们的平均单位重量的价值最高 2.分析:题意为最大化平均值问题,由于每个物品的重量不同所以无法直接按单位价值贪心,但是目标值有 ...
- HTML基础常识
什么是HTML? 超文本标记语言,用来制作网页 浏览器常识: 常见浏览器: 谷歌(Chrome).苹果(Safari) . IE(Edge).欧朋(Opera).火狐(Firefox) 浏览器内核:浏 ...
- 使用Python完成SAP客户端的打开和系统登陆
最近小爬一直思忖着如何将以前写的一些半自动化程序转为全自动化,这其中就涉及到SAP的打开和登录过程.我们都知道,SAP原生的“脚本录制和回放”功能是在用户进入到某一个SAP”用户指定系统“后才可以启用 ...