![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
文章平均质量分 72
Frozen_Guardian
已退役菜鸡Acmer
展开
-
洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)
题目链接:点击查看题目大意:给出一个二维平面坐标系,需要执行数次操作,具体操作分为下列两种:1 x y a:坐标 (x,y)(x,y)(x,y) 加上 aaa 个点2 x1 y1 x2 y2:查询以 (x1,y1)(x_1,y_1)(x1,y1) 为左下角、(x2,y2)(x_2,y_2)(x2,y2) 为右上角的矩阵中有多少个点题目分析:三种做法,但是树套树内存不太够,所以拿不了满分。剩下的四叉树跑的巨慢,cdq分治表现还算不错。因为写 cdqcdqcdq 的时候询问和加点并不会冲突原创 2021-08-23 18:41:58 · 379 阅读 · 0 评论 -
2021牛客多校6 - Gambling Monster(分治FWT优化期望dp)
题目链接:点击查看题目大意:有一个转盘,每次转动得到 0∼n−10\sim n−10∼n−1(???? 是 2 的幂)的概率分别给出。最开始你有一个数 x=0x=0x=0,每次转动转盘得到一个数 yyy,如果 x⊕y>xx\oplus y>xx⊕y>x,就令 x=x⊕yx=x\oplus yx=x⊕y,否则 xxx 不变。求使 x=n−1x=n-1x=n−1,期望转动转盘的次数。题目分析:求期望,考虑倒着的概率 dpdpdp设 P[i]P[i]P[i] 为转到 iii 的概率,设原创 2021-08-13 14:25:57 · 544 阅读 · 0 评论 -
洛谷 - P4721 【模板】分治 FFT(分治NTT)
题目链接:点击查看题目大意:给出序列 g1,⋯ ,ng_{1,\cdots,n}g1,⋯,n,求 f0,⋯ ,nf_{0,\cdots,n}f0,⋯,n规定 fi=∑j=1ifi−jgjf_i=\sum\limits_{j=1}^{i}f_{i-j}g_jfi=j=1∑ifi−jgj,其中 f0=1f_0=1f0=1题目分析:假如将区间一分为二,不难发现左侧的区间会对右侧的区间提供贡献,所以我们不妨参考cdq分治的思路,先将左侧区间都算出答案,然后再递归进入右侧区间,每次将数组偏移一下然原创 2021-08-11 13:12:02 · 752 阅读 · 0 评论 -
2021HDU多校7 - 7054 Yiwen with Formula(分治MTT优化dp)
题目链接:点击查看题目大意:给出一个长度为 nnn 的数列 aaa,现在需要求∏b1<b2<⋯<bk(ab1+ab2+⋯+abk)\prod_{b_1<b_2<\cdots<b_k} (a_{b_1}+a_{b_2}+\cdots+a_{b_k})b1<b2<⋯<bk∏(ab1+ab2+⋯+abk)需要满足:1≤bi≤n1 \leq b_i \leq n1≤bi≤nb1<b2<⋯<bkb_1<b_2原创 2021-08-10 23:41:35 · 328 阅读 · 0 评论 -
CodeForces - 1217F Forced Online Queries Problem(线段树分治+并查集撤销)
题目链接:点击查看题目大意:给出 nnn 个点,初始时互相不存在连边,需要执行 mmm 次操作,每次操作分为两种类型:1 x y1 \ x \ y1 x y:如果 (x,y)(x,y)(x,y) 之间没有连边,则增加连边;如果 (x,y)(x,y)(x,y) 之间存在连边,则删除连边2 x y2 \ x \ y2 x y:询问点 xxx 和点 yyy 之间是否联通询问需要强制在线题目分析:关于强制在线实现连边与加边原创 2020-12-22 14:06:20 · 280 阅读 · 1 评论 -
Gym - 101471D Money for Nothing(决策单调性+分治+贪心)
题目链接:点击查看题目大意:在二维平面中给出 n 个点可以作为矩形左下角的点,再给出 m 个点可以作为矩形右上角的点,现在问最大可以构造出多大面积的矩形,即如何选择,可以使得 ( b[ j ] . x- a[ i ] . x ) * ( b[ j ] . y - a[ i ] . y ) 最大题目分析:首先贪心去想,对于矩形左下角的点来说,如果存在着两个点 A( x1 , y1 ),B( x2 , y2 ),满足 x1 < y1 且 x2 < y2 的话,那么点 A 一定是要比点 B .原创 2020-12-07 14:19:57 · 1678 阅读 · 0 评论 -
CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)
题目链接:点击查看题目大意:给出一个长度为 n 的数列 a,现在要求选出一个 x,将 a 中的每个元素都异或之后得到一个新的数列 b,要求数列 b 的逆序对最小,问最小的逆序对是多少,x 该如何选择题目分析:才知道字典树上分治也可以求逆序对,时间复杂度是 nlogn 的,做法如下:将每个数都插入到字典树中,记录一下其下标 对于某个节点来说,其左子树中的点一定小于其右子树中的点 所以遍历一遍左子树中的点,双指针找一下右子树中有多少个点的下标大于当前枚举的点,累加起来就是逆序对的个数了因为每一原创 2020-10-13 16:40:12 · 344 阅读 · 1 评论 -
CodeForces - 1408F Two Different(构造+分治)
题目链接:点击查看题目大意:初始时给出一个长度为 n 的序列,每个位置 a[ i ] = i ,再给出一个映射 f( x , y ) = z,现在规定每次操作可以使得:t = f( a[ i ] , a[ j ] ) a[ i ] = t a[ j ] = t对于完全相同的 x 和 y,得到的 f( x , y ) 是相同的现在需要给出一种操作顺序,使得无论映射 f 如何定义,最后都能使得整个序列最多有两种不同的元素题目分析:自己手玩一下不难发现,如果 n 是 2 的幂次的话,总是有办原创 2020-10-03 20:06:32 · 285 阅读 · 0 评论 -
HDU - 5517 Triple(三维偏序-二维树状数组/CDQ分治)
题目链接:点击查看题目大意:给出 n 个二元对 ( a , b ) 和 m 个三元对 ( c , d , e ),对于所有 b == e 的二元对和三元对,可以通过某种运算形成一个新的三元对 ( a , c , d ) ,现在问所有的 ( a , c , d ) 中,有多少个三元对满足,不存在另一个三元对 ( a1 , c1 , d1 ) 满足 a1 >= a && c1 >= c && d1 >= d题目分析:首先需要分析出来,对于所有的二元对 (原创 2020-09-15 16:09:33 · 274 阅读 · 0 评论 -
洛谷 - P3810 【模板】三维偏序(陌上花开)(CDQ分治套树状数组)
题目链接:点击查看题目大意:给出 n 个点,每个点有三个属性 a , b , c ,对于每个点 i 来说,求出有多少个 j 满足 a[ j ] <= a[ i ] && b[ j ] <= b[ i ] && c[ j ] <= c[ i ]题目分析:三维偏序的模板问题,咕咕咕了有一年的CDQ分治,今天终于补出来了,简单总结一下,一维偏序排个序就出来了,二维偏序是对一维排序,另一维用线段树或树状数组维护,三维的话,第一维排序,第二维用归并排序维护,第原创 2020-08-28 20:53:44 · 239 阅读 · 0 评论 -
牛客多校5 - Graph(字典树+分治求最小生成树)
题目链接:点击查看题目大意:给出一棵树,每条边都有一个权值,每次操作可以删除任意一条边或者增加任意权值的一条边,现在可以执行数次操作,不过任何时间都要满足以下两个条件:n 个点互相连通 所有环的权值异或和为 0求数次操作后图上边权之和的最小值题目分析:将题意转换一下就可以转换为经典问题:完全图上的最小生成树,给出 n 个点,每个点都有权值 a[ i ] ,每条边的权值为 a[ i ] ^ a[ j ] 现在需要求最小生成树这个题目只需要 dfs 跑一遍就可以转换为上述问题了,这里不多赘述原创 2020-07-27 02:53:28 · 870 阅读 · 0 评论 -
POJ - 1741 Tree(点分治模板题)
题目链接:点击查看题目大意:给出一棵 n 个节点的树,现在定义 dis( x , y ) 为点 x 和点 y 之间的路径长度,现在问 dis ( x , y ) <= k 的点对有多少题目分析:点分治的模板题目,干货博客:https://www.cnblogs.com/PinkRabbit/p/8593080.html自己写的时候写了一堆bug。。提示一下,如果是WA的话可能有点无从下手,但如果用的是链式前向星,还仍然 TLE 的话,大概率是重心的地方出现细节问题了,因为如果重心使用不当,原创 2020-08-23 14:59:38 · 237 阅读 · 0 评论 -
牛客多校3 - Sort the Strings Revision(笛卡尔树+分治)
题目链接:点击查看题目大意:给出一个长度为 n 的数字串 s[ 0 ],每个位置的赋值初始时为 s[ i ] = i % 10 ( i ∈ [ 0 , n - 1 ] ),现在有一个长度为 n 的排列 p,和一个长度为 n 的数列 d ,相当于 n 次操作,每次操作需要将第 p[ i ] 个位置的数字变为 d[ i ] ,这样一共能得到 n + 1 个数字串,需要给这 n + 1 个数字按照字典序排序题目分析:显然是不能构造出 n + 1 个串然后排序的,而且数据范围也限制了只能 O( n ) 实现原创 2020-08-23 10:11:50 · 265 阅读 · 0 评论