![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
cdq分治
_beginend
这个作者很懒,什么都没留下…
展开
-
【hdu 5126 stars(四维偏序)】【cdq套cdq+树状数组】
题意在三维空间内,支持单点加111和矩形求和。q≤5∗104q\le 5*10^4q≤5∗104分析把一个询问拆成八个,就转化为了四维偏序问题。可以用cdq+树套树或者kd树来做,也可以cdq套cdq,复杂度同样是O(nlog3n)O(n\log^3 n)O(nlog3n).cdq套cdq就是先对第一维排序。处理时先递归左右两边,现在要处理左边对右边的询问,可以看成通过递归把第一维变为...原创 2020-02-17 21:36:23 · 247 阅读 · 0 评论 -
Codechef MONSTER 整体二分+分块
题意有n个敌人,编号为0到n-1,每个敌人都有一个血量h。现在有q次操作,每次给出两个数x和y,表示将所有编号为x的子集(二进制下)的敌人血量都减去y。要求每次操作后输出还剩下多少个敌人的血量大于0。 n≤217,m≤218,h,y≤109n≤217,m≤218,h,y≤109n\le2^{17},m\le2^{18},h,y\le10^9分析已经颓废到开始写题了。 首先可以整...原创 2018-08-31 18:36:54 · 342 阅读 · 0 评论 -
Codeforces 868F Yet Another Minimization Problem dp+决策单调性
题意有一个长度为n的序列,定义一个区间的权值是有多少个无序数对(x,y)满x不等于y且ax=ayax=aya_x=a_y。现在要把原序列分成k份,使得每份的权值的和最小。 n≤105,k≤20n≤105,k≤20n\le10^5,k\le20分析设fi,jfi,jf_{i,j}表示前iii个位置分成jjj份的最小权值,不难发现dp的转移有决策单调性,用cdq分治优化即可。...原创 2018-07-06 18:40:06 · 215 阅读 · 0 评论 -
bzoj 4836: [Lydsy1704月赛]二元运算 cdq分治+FFT
题意定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问。每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使得 a_i opt b_j=c 。 1≤n,m,q,ai,bi≤500001≤n,m,q,ai,bi≤500001\le n,m,q,a_i,b_i\le 50000分析cdq分治,每次用F...原创 2018-06-19 15:15:11 · 281 阅读 · 0 评论 -
bzoj 3237: [Ahoi2013]连通图 cdq分治+可撤销并查集
题意给一个n个点m条边的无向图,有K个询问,每次询问删掉一些边后原图是否仍然连通。 N<=100000 M<=200000 K<=100000分析这题的分治思路很棒棒呀。 由于是离线,可以把询问全部扒下来,然后对询问进行分治。 每次把左边没有右边有的边加进来,然后分治左边,右边同理。 连通性的话就用可撤销并查集维护一下就好了。什么?你问我如果强制在线的...原创 2018-03-29 07:48:20 · 392 阅读 · 0 评论 -
CS Academy Round 70 Squared Ends dp+cdq分治+凸包+二分
题意给出一个长度为n的序列a[1..n],现在要将这个序列分成k段,第i段[li,ri][li,ri][l_i,r_i]的贡献为(a[ri]−a[li])2(a[ri]−a[li])2(a[r_i]-a[l_i])^2。要求最小化每一段贡献的和。 n<=10000,k<=100分析设dp[i,j]dp[i,j]dp[i,j]表示前i个位置分成j段的最小贡献和。 不难得到...原创 2018-02-22 11:32:56 · 260 阅读 · 0 评论 -
bzoj 4237: 稻草人 cdq分治+单调栈+二分
题意JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典。 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地。和启示中的一样,田地需要满足以下条件: 田地的形状是边平行于坐标轴的长方形; 左下角和右上角各有一个稻草人; 田地的内部(不包括边界)没有稻草人。 给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数 1<=N<=2*10^5。原创 2017-10-23 19:57:53 · 286 阅读 · 0 评论 -
bzoj 1492: [NOI2007]货币兑换Cash cdq分治
题意题目分析有十分显然的dp做法,设f[i]表示到第i天能得到的最大现金。 不难得到f[i]=max(f[j]∗rate[j]/(b[j]+a[j]∗rate[j])∗a[i]+f[j]/(b[j]+a[j]∗rate[j])∗b[i])f[i]=max(f[j]*rate[j]/(b[j]+a[j]*rate[j])*a[i]+f[j]/(b[j]+a[j]*rate[j])*b[i]) 设x原创 2017-10-19 15:52:51 · 280 阅读 · 0 评论 -
bzoj 4025: 二分图 cdq分治+并查集
题意神犇有一个n个节点的图。因为神犇是神犇,所以在T时间内一些边会出现后消失。神犇要求出每一时间段内这个图是否是二分图。这么简单的问题神犇当然会做了,于是他想考考你。 n<=100000,m<=200000,T<=100000,1<=u,v<=n,0<=start<=end<=T。分析我们可以对时间进行cdq分治,然后用按秩合并的并查集来判断是否是二分图。 对于与当前区间交集不为空的边,如果该边原创 2017-07-22 16:34:19 · 402 阅读 · 0 评论 -
bzoj 2369&2687: 区间 cdq分治+决策单调性
1原创 2017-07-07 22:08:30 · 933 阅读 · 0 评论 -
bzoj 2216: [Poi2011]Lightning Conductor 决策单调性+cdq分治
题意已知一个长度为n的序列a1,a2,…,an。 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) 1<=n<=500000分析随手化简就可以得到p>=aj-ai+sqrt(|i-j|) 我们发现其实只要求max(aj+sqrt(|i-j|))就好了。不难发现这是有决策单调性的,那么就可以用整体二分来实现。 具体方原创 2017-05-09 21:56:53 · 694 阅读 · 0 评论 -
bzoj 2527: [Poi2011]Meteors cdq分治+树状数组
题意有N个成员国。现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站。 这个星球经常会下陨石雨。BIU已经预测了接下来K场陨石雨的情况。 BIU的第i个成员国希望能够收集Pi单位的陨石样本。你的任务是判断对于每个国家,它需要在第几次陨石雨之后,才能收集足够的陨石。 1<=n,m,k<=3*10^5 1<=Pi<=10^9 1<=Ai<1原创 2017-05-11 20:53:49 · 293 阅读 · 0 评论 -
bzoj 4553: [Tjoi2016&Heoi2016]序列 cdq分治+树状数组
题意给出一个长度为n的序列,有m个时刻,每个时刻序列的某一个数都会改变,然后马上又变回来。求一个最长的序列,使得其在任意时刻都不下降。 n,m<=100000分析我们设原序列为v[i],mn[i]表示位置i在所有时刻中的最小值,mx[i]表示最大值。 那么若一个j可以放在i的后面,那么必须要满足mx[j]<=v[i]且v[j]<=mn[i] 那么就变成了一个二维数点问题。 考虑cdq分治原创 2017-04-02 15:09:41 · 303 阅读 · 0 评论 -
bzoj 2683: 简单题 cdq分治+树状数组
题意要求资瓷下列操作: 1 x y z把(x,y)加上z 2 x1 y1 x2 y2求矩形x1 y1 x2 y2的权值和 n<=500000,x,y<=n,q<=200000分析首先可以把一个询问用容斥原理拆成四个询问,然后在cdq分治中二分一个横坐标mid,然后把操作从前往后扫一遍,若是修改操作且横坐标不大于mid则处理,若是询问操作且横坐标大于mid则处理;然后把操作按照横坐标分成左右两部原创 2016-11-22 21:50:37 · 373 阅读 · 0 评论 -
bzoj 3295: [Cqoi2011]动态逆序对 cdq分治+树状数组
题目大意给出1-n的一个排列和m个操作,每个操作有一个数字x表示在序列中把x这个数删掉,并且求在删掉x前该序列中有多少个逆序对。 n<=100000,m<=50000分析这题看完题后就想到了可以用树套树来搞,但是比较麻烦(其实也不是很麻烦)并且对于n<=100000,m<=50000的数据范围如果用nlog^2的复杂度去做的话会跑的很慢,于是就选择了新学的cdq分治。先一开始往序列里面插入没被删除原创 2016-10-24 19:30:18 · 376 阅读 · 0 评论 -
bzoj 2738: 矩阵乘法 cdq分治+二维树状数组
题意给出一个n*n的矩阵和q个询问,每次询问一个子矩阵内第k小的数。 n<=500,q<=60000,a[i,j]<=1000000000分析毕竟cdq分治做的题太少,没有往这方面去想。 知道了要用cdq分治来做就很简单了,二分一个答案然后把小于mid的元素都扔进二维树状数组里,判断每个询问小于mid的元素个数,若小于k则扔到右边,不然扔到左边就好了。 一开始zz了,每一次都是暴力枚举整个矩阵原创 2016-11-11 21:53:03 · 389 阅读 · 0 评论 -
bzoj 3262: 陌上花开 cdq分治
题目Description有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),又三个整数表示。现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb。显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。 Input第一行为N,K (1 <= N <= 100,000, 1 <= K <=原创 2016-10-23 21:45:09 · 435 阅读 · 0 评论 -
bzoj 1901: Zju2112 Dynamic Rankings 树状数组套线段树 cdq分治
题目传送门树套树一棵树状数组,每个节点上都是一棵权值线段树(不是可持久化线段树),线段树动态开节点。 然后每次查询的时候二分答案就好了。 时间复杂度O(nlog^3) 勉强水过……#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace原创 2016-10-23 20:16:33 · 466 阅读 · 0 评论