CDQ分治
文章平均质量分 52
DOFYPXY
这个作者很懒,什么都没留下…
展开
-
[BZOJ2683&&BZOJ1176] CDQ分治&&树状数组
询问操作可以分为四个。 首先按照x为第一关键字,y为第二关键字,操作为第三关键字排序。按照时间CDQ分治,就是按照数组的顺序用time<=mid的修改更新time>mid的查询,用树状数组搞(每次树状数组要清空)。结束当前分治后要把time<=mid和>mid的放在两边继续分治,但要保证每个分治结构中x,y,opt依然是有序的。 复杂度O(n log^2 n),n<=800000。 代码:ty原创 2017-04-18 21:31:25 · 365 阅读 · 0 评论 -
[2017湖南集训7-9]大佬的问题 (数点问题)
题目大意:给出三个排列A,B,C,问同时满足Ax < Ay,Bx < By,Cx < Cy的数对有多少。 O(n log^2 n)的做法:经典的三维数点问题,排序一维,CDQ分治一维,树状数组一维。 O(n log n)的做法:因为均为排列,所以没有相同的元素,设S(x,y)=[Ax < Ay]+[Bx < By]+[Cx < Cy]。显然max(S(x,y),S(y,x))的取值只有2或3,假原创 2017-07-09 19:43:36 · 640 阅读 · 0 评论 -
[BZOJ3110][ZJOI2013]K大数查询 树套树/CDQ分治
树套树做法: 注意到权值很小,于是外层开权值线段树,内层是一个动态开点的区间线段树,维护权值在[L,R],位置在[l,r]的数一共有多少个。 修改就是内层的一个线段树上区间加一。 查询时,外层线段树中先判断左子树中够不够k个数,若够则往左子树递归,不够就减一下后往右子树。 代码(MLE):#include<iostream> #include<cstdio> using namespace原创 2017-12-03 17:38:56 · 324 阅读 · 0 评论 -
[2018雅礼3-27]subset 分类讨论+三维偏序+二维偏序
首先有个显然的结论,对于一个集合SSS,当ax,bx,cxax,bx,cxa_x,b_x,c_x均不为最大值时从SSS中删去xxx,那么|S|≤3|S|≤3|S|\le 3且一个SSS唯一对应一个答案。 我们先用O(nlog2n)O(nlog2n)O(n\log ^2n)的三维偏序预处理出对于每个xxx,有多少个yyy满足ax>ay,bx>by,cx>cyax>ay,b...原创 2018-03-28 22:02:47 · 352 阅读 · 0 评论