首页 > 其他分享 >CDQ分治

CDQ分治

时间:2024-12-10 21:20:29浏览次数:4  
标签:偏序 数点 分治 mid CDQ DP

CDQ分治,解决三维数点(三维偏序)问题。
第一维用分治化掉,用第一维<=mid的向第一维>mid的贡献,剩下的两维用二维数点解决。模板
在线二维数点转化为离线三位数点
其实任何在线k维数点都可以转化为离线(k+1)维数点,常见是把时间变成一维,每次数时间这一维比自己小且满足另两位限制的点(例1例2
CDQ优化DP
CDQ优化DP,就是当DP方程式要满足一个三位偏序关系才能转移时,可用CDQ处理。每次树状数组修改时修改值维当前对应dp值。要注意必须左右CDQ中间夹着处理,像这样:

点击查看代码
 CDQ1(l,mid,lo);
    for(auto i:vp){
        if(h[i]<=mid)modify(v[i],f1[i]);
        else {
            f1[i]=Max(f1[i],query(v[i])+1);
            f1[i].cnt=max(f1[i].cnt,1.0);
        }
    }
    for(auto i:vp)if(h[i]<=mid)clear_(v[i]);
    CDQ1(mid+1,r,ro);
而不能这样:
点击查看代码
 CDQ1(l,mid,lo);CDQ1(mid+1,r,ro);
    for(auto i:vp){
        if(h[i]<=mid)modify(v[i],f1[i]);
        else {
            f1[i]=Max(f1[i],query(v[i])+1);
            f1[i].cnt=max(f1[i].cnt,1.0);
        }
    }
    for(auto i:vp)if(h[i]<=mid)clear_(v[i]);
    

四位偏序
其实就是在CDQ外面再套一层分治,把多出的一维干掉(模板

标签:偏序,数点,分治,mid,CDQ,DP
From: https://www.cnblogs.com/OIergyy/p/18598043

相关文章

  • cdq 分治
    简介cdq分治常用于计算序列中需要满足某些限制的点对对答案的贡献,通常点对有\(O(n^2)\)个。核心思想与普通分治类似,把点对分成前半个区间和后半个区间的点对,但cdq分治还要处理跨越区间中点的点对,这就是cdq分治的核心所在。算法流程下面以三维偏序为例。P3810【模板......
  • CDQ分治
    算法简介用于解决三维数点问题:给定形如你个\((x,y,z)\)的三维坐标,然后让你求有多少个点三个维度的坐标都小于这个点做法:用分治思想将其转化为二维数点二位数点:先用排序解决掉第一维,再用树状数组维护第二维小于它的点数分治思想:我们把一个区间划分为两半,我们只统计左半部......
  • 【学习笔记】树分治
    点分治普通的分治在一段子段\([l,r]\)中处理和\(mid\)有关的信息然后递归处理\([l,mid)\)和\((mid,r]\)。由于中点的优秀性质这种看似暴力的做法实际复杂度是\(O(n\logn)\)的。点分治是一种把分治思想运用到树上解决问题的算法(但是其实更多人愿意称其为数据结构?)。它一......
  • 【题解】P5787 二分图 /【模板】线段树分治
    二分图最简单的方法是染色法实现,但是扩展域并查集也可以实现,有两个集合\(S,T\),具体的是相连边的两个点\(x,y\)总是在不同的两个集合中,若出现在同一集合中即不是一个二分图。对于时间段建边考虑用线段树储存,线段树按照时间轴划分,将将对应时间区间的节点储存上当前连边操作,小时......
  • 递归和分治
    一.递归的概念一个递归过程表示为基语句和终止条件。递归算法的思想是将较大规模的对象的操作归结为对较小规模的对象实施同样的操作。将复杂问题分解为较为简单的子问题组合。举例:单链表是一种递归的数据结构,hanoi问题是一种递归的问题求解。优点:结构清晰可读性强,容易用数......
  • 归并分治
    [Algo]归并分治1.经典归并排序//1.经典归并排序voidmerge(vector<int>&v,intleft,intmid,intright){vector<int>tmp(v);inti=left,j=mid+1,k=left;while(i<=mid&&j<=right)tmp[k++]=v[i]<=v[j]?v[......
  • 递归、分治和动态规划
    递归、分治和动态规划是算法中的三种重要思想,尽管它们有一些相似之处,但在具体实现和应用上有所不同。下面我将逐一讲解这三者的概念和区别。1.递归(Recursion)递归是算法中的一种思想,指的是通过将一个大问题分解为规模较小的相同问题来求解问题。递归通过函数自己调用自己来实现......
  • 蓝桥杯分治
    P1226【模板】快速幂题目描述给你三个整数 ......
  • LeetCode刷题 -- 分治快排
    目录颜色分类题目解析算法原理代码排序数组题目解析算法原理代码数组中第K个最大元素题目解析算法原理代码LCR159.库存管理III题目解析算法原理代码颜色分类题目链接题目解析数组分为三块算法原理1.如果nums[i]==0,++left,i++下标对应元素交换,先+......
  • 算法时间复杂度和空间复杂度计算方法(O(1)、O(n)、O(logn)、O(n^2)、O(n^3 )、O(n!))分
    文章目录时间复杂度与空间复杂度计算方法一、时间复杂度概述1.1时间复杂度的定义1.2常见的时间复杂度-**常数复杂度O(......