首页 > 其他分享 >cdq分治

cdq分治

时间:2024-07-10 15:19:27浏览次数:6  
标签:偏序 半边 递归 分治 cdq 数组

cdq分治

其大致形式为

  • 递归左右半边
  • 考虑左半边对右半边的影响

二维偏序(归并排序):

计算数对 \((i,j)\) 满足 \(a_i<a_j\) 并且 \(b_i<b_j\) 的数对数量

先以 \(a_i\) 排序,这样条件被转换为 \(i<j\) 且 \(b_i<b_j\)

考虑cdq分治

先递归左右半边

对左右两边各开一个指针,若 \(b_i<b_j\) 则\(\text{cnt++}\) ,把 \(i\) 放入一个新数组,否则 \(\text{ans+=cnt}\) 把 \(j\) 放入

把原数组用新数组替换,回溯

复杂度 \(O(n\text{log}n)\)

三维偏序

计算数对 \((i,j)\) 满足 \(a_i<a_j\) 且 \(b_i<b_j\) 且 \(c_i<c_j\) 的数对数量

先以 \(a_i\) 排序,这样条件被转换为 \(i<j\) 且 \(b_i<b_j\) 且 \(c_i<c_j\)

先递归左右半边

对左右两边各开一个指针,若 \(b_i<b_j\) 则把 \(i\) 放入一个新数组,否则把 \(j\) 放入,并打一个标记

把原数组用新数组替换,并对 \(c_i\) 其做二维偏序

回溯

用途

对一些需要修改的题,把时间看成新的一维,然后三维偏序

标签:偏序,半边,递归,分治,cdq,数组
From: https://www.cnblogs.com/WJChp/p/18294145

相关文章

  • Day 2 - 分治与倍增
    分治的延伸应用应用场景优化合并假设将两个规模\(\frac{n}{2}\)的信息合并为\(n\)的时间复杂度为\(f(n)\),用主定理分析时间复杂度\(T(n)=2\timesT(\frac{n}{2})+f(n)\)。能直观的看出优化程度还是很大的。归并排序中\(f(n)=O(n)\),则\(T(n)=O(n\logn)\)。......
  • 递归 | 分治
    这两个算法有部分重合,所以一起讲。递归\(\sf\small\color{gray}Recursion\)递归是递归函数的灵活运用。说到底,它是一个\(\color{blue}\texttt{C++}\)的一个语言特性。在函数内部调用函数,会使得思路更加清晰明了。观察生活,很多事情随着规模或阶段的上升而变得越来越复杂。......
  • 读人工智能全传03分治策略
    1. 黄金年代1.1. 图灵在他发表的论文《计算机器与智能》中介绍了图灵测试,为人工智能学科迈出第一步做出了重大贡献1.2. 美国在第二次世界大战后几十年里计算机技术发展的特色,也是美国在未来60年内确立人工智能领域国际领先地位的核心1.3. 1955年,麦卡锡向洛克菲勒研究所撰......
  • CF1039D You Are Given a Tree (树形 dp + 贪心 + 根号分治)
    CF1039DYouAreGivenaTree树形dp+贪心+根号分治题目是一个经典问题,可以用树形dp和贪心解决。设\(f_u\)表示以\(u\)节点为端点能够剩下的最长路径。考虑从叶子节点往上合并贪心,那么如果能够合并出包含\(u\)节点的大于等于\(k\)的路径,那么就合并,\(f_u=0\);否......
  • 动态DP&动态树分治
    引入——最大权独立集问题:最大权独立集:对于一棵树,求出一个点集,这个点集里面的任意两个点都不相连。那么在所有这样的点集中,点权和最大的那个点集,就被成为最大权独立集。想要求出最大权独立集的点权和,我们只需要使用树上dp的方法即可实现设数组f[N][2]其中f[x][0]表示不选择......
  • C140 线段树分治+01Trie P4585 [FJOI2015] 火星商店问题
    视频链接:   C09【模板】可持久化字典树(Trie)-董晓-博客园(cnblogs.com)P4585[FJOI2015]火星商店问题-洛谷|计算机科学教育新生态(luogu.com.cn)//线段树分治O(nlognlogn)#include<iostream>#include<cstring>#include<algorithm>#include<vect......
  • [暴力 Trick] 根号分治
    根号分治PS:本篇博客题目分析及内容(除代码)均来自于paulzrm根号分治,是暴力美学的集大成体现。与其说是一种算法,我们不如称它为一个常用的trick。首先,我们引入一道入门题目CF1207FRemainderProblem:给你一个长度为$5\times10^5$的序列,初值为$0$,你要完成$q$次操作,操作有如......
  • 无根树分治的三种常见方法
    无根树分治一般常见于树上路径问题(计数,最优化等).常见题目如无权树树上距离为k(对1到n-1求)的路径数量.点分黑白且可以改,求两端都是黑点的最远路径.以我的理解,三种分治都是无法互相平替的,对于每种分治我尝试给出一道只能用这个分治的题目.三种分治复杂度均为logn*T(n).......
  • C138 线段树分治 P2056 [ZJOI2007] 捉迷藏
    视频链接:C138线段树分治P2056[ZJOI2007]捉迷藏_哔哩哔哩_bilibili   P2056[ZJOI2007]捉迷藏-洛谷|计算机科学教育新生态(luogu.com.cn)//线段树分治O(nlognlogn)#include<iostream>#include<cstring>#include<algorithm>#include<vector>#inclu......
  • 算法设计与分析复习题 pta(第3章 分治法)
    7-1魔法优惠券#include<iostream>#include<stdio.h>#include<string.h>intcmp(constvoid*a,constvoid*b){return*(int*)b-*(int*)a;}intmain(){intn;scanf("%d",&n);inti,j;inta[n];memset(......