随笔分类 -  基础算法 - CDQ分治

摘要:题目大意:求二维最长上升子序列的长度。 题解: 可以看出,这个问题等价于三维偏序问题。 不过在进行分治的时候要注意,由于 dp 转移是有顺序的,因此只能先处理左半部分,再处理左半部分对右边的贡献,最后处理右半部分。 代码如下 cpp include using namespace std; cons 阅读全文
posted @ 2019-06-30 16:04 shellpicker 阅读(187) 评论(0) 推荐(0)
摘要:题目大意:给定一个 N\ N 的矩形,有 Q 次操作,每个操作可以是矩形单点修改或查询子矩形的权值和。 题解:CDQ分治适合处理修改操作之间互不影响且支持离线的题目。 满足以上操作条件的显然可以树套树来做,不过代码量起飞,我也写不出来 qaq。。 学到了利用 cdq 分治来解决这种问题。发现操作之间 阅读全文
posted @ 2019-06-30 14:32 shellpicker 阅读(239) 评论(0) 推荐(0)
摘要:题目大意:给定一个三维空间点的坐标,求对于任意一个点三维均小于等于这个点的点个数。 题解:学会了简单的 cdq 分治。 首先,先将第一维从小到大排序,再用类似归并排序的操作对第二维进行排序,在第二维合并的过程中,用树状数组维护第三维,统计左半部分对右半部分答案的贡献。 需要注意的几点问题,如下: 1 阅读全文
posted @ 2019-03-26 09:08 shellpicker 阅读(218) 评论(0) 推荐(0)