CDQ分治
Wuliwuliii
谁无暴风劲雨时,守得云开见日明!
展开
-
HDU - 5618 【CDQ分治+树状数组求解三维偏序】
题目链接 T组测试,有N个点然后给出每个点的三维坐标,然后求每一位坐标都小于等于它的点的数量有多少个。 简单的三维偏序问题,但是需要注意的是,完全相等的情况,所以一开始的时候预处理一下即可。#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <algorithm>#in..原创 2020-06-13 16:10:58 · 239 阅读 · 0 评论 -
Guessing Camels 【Gym - 101485G】【CDQ+树状数组求解三维偏序】
题目链接题面 有三个人在赌骆驼,骆驼的标号是1~N,但是这三人无聊,他们想知道他们赌的骆驼中有几对骆驼是相对位置相同的,什么是相对位置相同?就是譬如骆驼A和骆驼B,在三个人的纸条上都是A在B的前面,那么就代表了相对位置是相同的了。 所以,我们可以记录每个骆驼的三个坐标,然后求一个最长上生子序列,用三维偏序的方法,去求解答案。#include <iostream>#include <cstdio>#include <cmath>#include ..原创 2020-06-13 10:04:38 · 256 阅读 · 0 评论 -
Boring Class 【HDU - 5324】【cdq套cdq+SPFA输出最长上升子序列】
题目链接 经典三维偏序,求这样的一个最长上升子序列:,,,其中,id这个很容易被忽略掉。 然后我们可以直接用外层cdq套内层cdq的方式去解决这个问题了。 第一维的x直接用sort排序,这里就不管了,接下去,第二维的y呢,我们用外层cdq去解决,因为要求一个上升子序列,所以可以先对左区间处理完,然后将左区间的贡献先给右区间,然后再处理右区间内的左区间,然后逐步这样往下即可。 关于输出答案,也就是要输出字典序最小的最长上升子序列,我们可以先得到每个点的当前值可以是由前面的哪个id转移过...原创 2020-05-25 11:19:13 · 284 阅读 · 6 评论 -
Coronavirus Battle【CDQ套CDQ】【2020 年 “游族杯” 全国高校程序设计网络挑战赛 C】
题目链接 题意:给出N个三维坐标,输入按照题意的这个给出:ull CoronavirusBeats(){ ull k3 = k1, k4 = k2; k1 = k4; k3 ^= k3 << 23; k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26); return k2 + k4;} 只有一个N,和K1和K2,然后N个三维坐标由该式子确定。 然后求一个最长上升子序列,使得且不能...原创 2020-05-24 21:18:02 · 521 阅读 · 11 评论 -
Radio stations【CDQ套CDQ求解三维偏序】
题目链接 CF762E Radio stations一共有 n 个电台,对于每个电台 i 有三个参数:xi,ri,fi,分别指它的一维坐标、作用半径和频率。如果两个电台的频率差值在 k 内,并且它们的作用范围都能覆盖到彼此,那么就称这两个电台相互干扰。问这 n 个站台中相互干扰的站台有多少对。 很明显是要去求解二维偏序问题,我们可以考虑成求一个二维面积的问题。 相当于...原创 2020-05-01 17:34:31 · 344 阅读 · 0 评论 -
Color it【HDU-6183】【CDQ分治套线段树】
题目链接 题目中有这样的三种操作:清空 添加颜色进(x,y)这个点颜色c 查询(1,y1)到(x,y2)区间内有几种颜色 一开始的时候我直接写了个二维主席树,但是就是RE过不去,但是开大点就会TLE了,所以实在没法,只能想别的办法来做。 这里的突破口还是在这个“1”上面,我们其实可以看作是查询一个前缀和的形式,但是限制条件y的范围在[y1, y2]之间。 所以,我的做...原创 2020-01-14 22:02:04 · 211 阅读 · 0 评论 -
CDQ套CDQ求解三维偏序
陌上花开陌上花开,可缓缓归矣 —— 吴越王 我们知道CDQ分治套树状数组可以求解三维偏序问题,那么既然CDQ分治能求得降维的问题,如果要用CDQ分治套CDQ分治来解决三维偏序问题呢? 我们其实就是在CDQ分治直接求解二维偏序上面套了个CDQ分治来解决第一维的问题,并且对第二维进行一个处理。然后,我们不能直接对原数组进行处理,因为那样子会改变他的原有的序号,不再是对第一、二维的直...原创 2019-09-17 11:00:31 · 926 阅读 · 0 评论 -
CDQ分治套树状数组求三维偏序
陌上花开BZOJ 3262 首先先要记得一件事,当我们处理左右区间的时候,其实已经不用去管一维偏序的情况了,相当于我们已经用了快排对一维偏序处理完了,但是这时候,我们不能保证左右各自的二维偏序是排好序的(这题也是神奇,忘考虑这个竟然能过样例,0分),所以,我们第二个的在CDQ分治内的操作可千万不能忘记对二维偏序进行排序。 第三维偏序,我们可以套用CDQ套CDQ来进行求解,同时也可以...原创 2019-09-16 18:20:50 · 266 阅读 · 0 评论 -
CDQ分治解二维偏序
Stars-POJ 2352 求解没有重复项的包含子集的个数。 我们直接求其贡献,对于一维偏序x坐标进行升序排序,对于二维偏序y坐标进行分治,我们从递归至底层,然后向上更新,对于左右子树,左子树的x一定是小于右子树的任意一个点的x坐标,所以我们求对右子树的贡献的时候,可以直接比较y坐标的大小。 并且,对于已经处理完的左右区间,y是单调的。#include <iostr...原创 2019-09-15 10:22:22 · 494 阅读 · 0 评论 -
[Cqoi2011]动态逆序对【CDQ分治求三维偏序】
题目链接 还是不会CDQ分治啊,还是看着博客思索着思路的,虽然知道该走哪个方向,但是代码仍然还是写不出来啊呜呜呜! 首先,就是把删除当作反向插入的这样一个过程倒是比较好想到,但是后面呢,我们得到了它们各自的时间戳,相当于把原来的每个数变成了(t, x, y)这样的形式了,那么我们就是需要去求的是合法的时间戳内,逆序对的个数了,不妨可以看成对应的时间戳上,产生的贡献是多少。 CDQ...原创 2019-09-14 10:59:06 · 220 阅读 · 0 评论 -
[BOI 2007] 摩基亚Mokia【CDQ分治求三维偏序】
题目链接 因为是有修改操作的求三维偏序,所以在这里我们不能简单的使用树状数组之类的二叉搜索树来解决这类问题。 这里就是用到了cdq分治来进行降维的操作,我们首先对一维偏序的x进行升序排列,然后再对二维偏序的y(先留一下),最后我们用cdq的方式进行对时间戳的分治。 cdq分治的过程:先对一维偏序进行排序; 对时间戳(二维偏序)进行分治,前面分治的左边时间会对右边的时间戳造成...原创 2019-09-11 15:31:30 · 171 阅读 · 0 评论