CDQ分治 & 整体二分
文章平均质量分 80
BraketBN
这个作者很懒,什么都没留下…
展开
-
【BZOJ2738】矩阵乘法【整体二分】
然而和矩阵乘法并没有什么关系。将矩阵里的数当做添加操作,二分答案。对于添加操作,遇到小于等于mid的数,在二维树状数组里的相应坐标加上1,这样可以查询一个矩阵里面有多少的数小于等于mid。对于查询操作,直接在二维树状数组里查询小于等于mid的数的个数。如果个数大于k,说明第k小比mid小,反则同理。对于查询操作还需要记录一个cur值,表示当前有多少数小于k。#inc原创 2016-01-22 16:51:42 · 653 阅读 · 0 评论 -
【BZOJ2683】简单题【CDQ分治】
【题目链接】写完才发现和BZOJ1176一样.../* Pigonometry */#include #include using namespace std;const int maxn = 500005, maxm = 1000005;int n, tr[maxn], ans[maxm];struct _data { int opt, id, qid, x,原创 2016-04-06 11:34:03 · 399 阅读 · 0 评论 -
【BZOJ2773】ispiti【CDQ分治】【线段树】
【题目链接】很容易看出来是CDQ分治,但是细节比较多。令B为x轴,A为y轴...给x轴排序要按降序排,而且当插入与查询在同一个点时,要先查询再插入,这样就不用维护次小值了。光给操作离散化了,忘了给点离散化...导致大数据GG。/* Pigonometry */#include #include #include using namespace原创 2016-04-28 12:14:43 · 670 阅读 · 0 评论 -
【BZOJ4430】[Nwerc2015]Guessing Camels赌骆驼【树状数组】【或CDQ分治】
【题目链接】题解:直接用CDQ分治是O(nlog^2n)的,似乎可以过。一种O(nlogn)的做法,考虑补集转化,答案 = 总对数 - 不满足条件的对数。考虑不满足条件的数的性质,这一对数在其中两个排列里的位置关系是相同的,在另一个排列里的位置关系相反。那么统计两两排列之间不满足偏序关系的数对的个数,这样统计下来每对数都被统计了两次,除以2就是不满足条件的对数。原创 2016-05-13 09:55:20 · 1464 阅读 · 0 评论 -
【BZOJ1901】Zju2112 Dynamic Rankings【树状数组套主席树 / 整体二分】
【题目链接】一万年前只用整体二分写了,现在来补树套树.../* Pigonometry */#include #include #include using namespace std;const int maxn = 10005, maxm = 10005, maxnode = 2200005;int n, m, num[maxn], disc[maxn + max原创 2016-04-18 19:40:50 · 545 阅读 · 0 评论 -
【总结】CDQ分治
总的来说,CDQ分治与普通分治不一样的地方在于,CDQ分治的对象是时间。即对于一个时间段[L, R],我们取mid = (L + R) / 2,(用数据结构题举例)分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid,R]。显然,CDQ分治是一种离线算法,我们需要将所有的修改/查询存下来,一起进行操作。同时,CDQ分治还需要满足:操作之间相互独立,即原创 2016-04-19 07:35:54 · 3595 阅读 · 0 评论