首页 > 其他分享 >CDQ分治

CDQ分治

时间:2024-02-04 12:56:35浏览次数:17  
标签:归并 树状 分治 CDQ 排序 cdq

CDQ分治

引入

偏序问题

对于每个有序对 \((a_i,b_i)\)

求有多少个有序对 \((a_j,a_j)\)

\(a_i<a_j,b_i<b_j\)

暴力 \(O(n^2)\)

按 \(a\) 排序,问题为求顺序对,cdq分治

定义

解决特定种类问题的算法,统计左区间对右区间的贡献,一个点所得贡献必然计算,且区间划分不重不漏

实现

要注意有些问题,一个点可以在多个分治里统计答案

闲话

跟归并排序像,但是不能叫做归并排序(孙悟空的子孙不是孙悟空),名字都是有来由的。

cdq套cdq(官方可行) 树状套树状(私人可行) cdq套树状(C) 树状套cdq
(??)
可能有意义

标签:归并,树状,分治,CDQ,排序,cdq
From: https://www.cnblogs.com/life-of-a-libertine/p/18005976

相关文章

  • Problem P06. [算法课分治] 找到 k 个最长重复字符串
    注意是在该子字符串内每个字符的出现次数都不少于k。可以采用分治的方法,函数找一个不符合条件的字符,然后将字符串分成两个子字符串,就这样进行递归运算,每次找到符合条件的子字符串就判断一波长度,然后将最长的长度值存下来。#include<iostream>#include<bits/stdc++.h>#includ......
  • $CDQ$ 分治总结
    \(CDQ\)分治是一种特殊的分治方法,基本思想就是前一半的结果辅助后一半答案解答。一、归并排序提到\(CDQ\)分治,就不得不提到归并排序。作为一种似乎只有在瑞士轮里才有用的算法,归并排序有着优秀的时间复杂度,短小精悍的代码,十分的可爱。首先,我们将问题转换成这样(\(l,r\)代......
  • 树分治
    点分治适合处理大规模的树上路径信息。实现取一个中心点计算跨过中心点的贡献。(lsy说得精辟但抽象)先随便指定一个根\(rt\),我们能将树上的路径分为经过\(rt\)的路径和包含于\(rt\)的某棵子树内的路径(不经过\(rt\))。对于经过当前根节点的路径,又可以分为两种,一种是以根节......
  • 树分治相关
    树分治相关一种特别的分治思想,但难点不在于点分治思想本身。有板子,但是板子跟题目重点几乎无关。点分治淀粉质用途:用于处理树上多对点询问或寻找有条件最远(最近)点对。主要是处理多对点对。做法:我们先选择一个节点作为根节点\(rt\),所有完全位于其子树中的路径可以分为两......
  • 上辈子推的"分治 NTT"复杂度分析
    hdu7381Cargo式子部分由liuhangxin想出。\[\sum\limits_{i=0}^{n}\binom{k}{i}(n-i)^{k-i}[x^i]\prod\limits_{id=1}^{m}(1-x^{c_{id}})\]实现部分当时胡了一个分治NTT,也不知道时间复杂度为什么是对的,但是过了。AC后十多分钟分析出来这个做法的时间复杂度为\(......
  • 树分治学习笔记
    点分治0.用处点分治一般用于树上路径的问题。比如求条数等。1.点分治过程选择一个根节点计算贡献,贡献一般有一下两种1.两个点的路径经过根节点2.两个点在同一个子树内然后把根节点删掉,分成若干棵树,对每一棵树做同样的操作然后每一次我们只需要计算两个点的路......
  • 边分治和边分树
    边分治就是,每次选择一条边作为分治中心。然后把这条边断掉,在两个连通块内继续递归。考虑将原树三度化,就是对于\(u\)的每条出边,新建一个点\(w\),连边\((u,w,0),(w,v,d)\),然后令\(u=w\)。三度化后边分治的复杂度就是对的,为\(O(n\logn)\)。边分治的好处是,每次只用考......
  • Ybt 金牌导航 6.1.H. 时空旅行 / P5416 [CTSC2016] 时空旅行(线段树分治+凸包)
    题意简述初始有版本\(0\),其中仅包含点\(0\),且\(c_0\)给出,\(x_0=0\)。对于第\(i\)个版本,它依赖第\(fr_i\)个版本,而且会在父级版本的基础上进行以下两种操作之一:插入一个新点,并且会给出\(x_i\)和\(c_i\)。删除一个本就存在的点(不为\(0\))给出\(m\)次询问,每次给出......
  • CF-1921-F-根号分治
    1921-F题目大意有一个长为\(n\)的序列\(a\),有\(q\)次询问,对于每次询问:给定\(s,d,k\),请输出\(\sum_{i=1}^{k}i*a_{s+(i-1)*d}\)Solution根号分治。对于\(d\ge\sqrt{n}\)的情况,直接暴力计算即可。对于\(d\le\sqrt{n}\)的情况,这时需要预处理两个数组:\(pre,sum\),这里\(pr......
  • CEOI2023D1T3(LOJ4019) Brought Down the Grading Server? (分治+欧拉回路)
    因为我们有\(S=2^k\),所以我们先考虑\(k=1\)即\(S=2\)的时候应该怎么做。发现如果我们对于每一个核心从\(t_1\)向\(t_2\)连一条无向边,如果我们把「不交换\(t_1,t_2\)」看成将这条边定向为\(t_1\tot_2\),否则如果「交换\(t_1,t_2\)」看成将这条边定向为\(t_2\tot_1......