首页 > 其他分享 >CDQ分治学习笔记

CDQ分治学习笔记

时间:2024-04-24 16:46:01浏览次数:27  
标签:le 分治 mid 笔记 leq solve CDQ

1. 简介

CDQ分治是一种思想,类似于动态规划,依照原理和写法的不同,大致分为3类:

  • 解决与点对相关的问题

  • 1D动态规划的优化及转移

  • 通过CDQ分治,将一些动态问题转化为静态问题

2. 解决与点对相关的问题

2.1. 流程

1.找到序列的中点mid

2.将所有的点对(i,j)划分为三类

a. \(i\le mid,j\le mid\)

b. \(i\le mid,j>mid\)

c. \(i>mid,j>mid\)

3.将原序列拆成(1,mid),(mid+1,n)两个序列,第一和第三类可以递归处理,第二类则另外想办法

2.2. 例题

【模板】三维偏序(陌上花开)

oj:https://gxyzoj.com/d/gxyznoi/p/P18

题目描述

有 $ n $ 个元素,第 $ i $ 个元素有 $ a_i,b_i,c_i $ 三个属性,设 $ f(i) $ 表示满足 $ a_j \leq a_i $ 且 $ b_j \leq b_i $ 且 $ c_j \leq c_i $ 且 $ j \ne i $ 的 \(j\) 的数量。

对于 $ d \in [0, n) $,求 $ f(i) = d $ 的数量。

输入格式

第一行两个整数 $ n,k $,表示元素数量和最大属性值。

接下来 $ n $ 行,每行三个整数 $ a_i ,b_i,c_i $,分别表示三个属性值。

输出格式

$ n $ 行,第 $ d + 1 $ 行表示 $ f(i) = d $ 的 $ i $ 的数量。

提示

$ 1 \leq n \leq 10^5$,$1 \leq a_i, b_i, c_i \le k \leq 2 \times 10^5 $。

2.3. 解法

这是一道和点对有关的问题

首先将三元组按a排序

假设此时已经写好了solve(l,r),且通过求解得到了solve(l,mid),solve(mid+1,r),此时,可以考虑如何求解第二部分的答案

可以发现,此时因为已经排序,所以\(a_i\le a_j\)的条件已经没什么用了,那么此时只剩下两个条件,

标签:le,分治,mid,笔记,leq,solve,CDQ
From: https://www.cnblogs.com/wangsiqi2010916/p/18155809

相关文章

  • 支持私有部署的云端存储双链笔记软件
    大家好,我是Java陈序员。我们无论是日常生活还是办公,常常需要使用一些工具软件来记录笔记、代办事项等。今天,给大家介绍一款支持私有化部署、支持多端使用的笔记软件。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍Bl......
  • 点分治小记
    点分治是一类高效统计树上路径问题的算法,通过优化递归深度的方法来有效保证时间复杂度。具体操作一般是以下几步:找到当前子树的重心以重心为根计算经过根节点的路径对答案的贡献将根删去并递归处理它的所有子树因为我们每次都以树的重心来作为根节点,递归深度不会超过......
  • 算法小笔记0424
    1在C++中,multiset是一种容器适配器,它允许存储多个具有相同键的元素。它是set的一个变体,与set不同的是,multiset允许重复的元素。multiset中的元素按照特定的排序标准自动排序,这个排序标准是在容器创建时指定的。下面是一个使用multiset的简单示例:#include<iostream>......
  • chakra-ui学习笔记(一)
    前言:发现chakra-ui也不错,虽然比起antd功能稍少一点。 1,Stack与Flex区别NotesonStackvsFlex#TheStackcomponentandtheFlexcomponenthavetheirchildrenspacedoutevenlybutthekeydifferenceisthattheStackwon'tspantheentirewidthofthecontainer......
  • Android开发笔记[18]-使用本地模块
    摘要将摄像头预览页面封装到Android模块中并在app中使用这个本地模块.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk26targetSdk34compileSdk34开发语言:K......
  • Java SE 笔记搬运
    本科过过两遍JavaSE,但是由于考研等不可抗力因素很久未接触代码,因工作需求这里将四年前的Java笔记重新整理搬运,方便Java学习。——————————————————————————————————————————————————————————————继承/*私有化的......
  • python爬虫—学习笔记-4
    课堂内容:删除原导出文件的venv,pycham打开此文夹,重新创建本地虚拟编译器。安装依赖库,打开pycham终端输入pipinstall-ryilaiku.txt,安装依赖库中的库。继续安装bs4、lxml库,命令为:pipinstallbs4和pipinstalllxml。安装好后,pycham来到spiders目录下,新建Python......
  • [哈工大软件工程期末考试] 《软件过程与项目管理》复习笔记
    软件过程与项目管理复习第一章:软件及软件工程软件的概念什么是软件?软件是一组对象或项目所形成的一个“配置”,由程序、文档、数据等部分构成。软件的四大特性复杂性不可见性易变性一致性软件工程的发展软件的发展阶段第一阶段主要用于数值计算的需求完全依......
  • 《向上生长》读书笔记
    Title:《向上生长》Author:九边Genre:个人成长;情绪;心灵;Rating:❤️❤️❤️Date:2021-01-08总结《向上生长》卖的就是基于阅历的信息差像这种价值观输出的书籍,能让年轻人看得入迷的一个重要原因是:基于读者和作者之间阅历差距而产生的信息差,年轻读者一看到这些内容仿佛打开了新世界的......
  • 【编译原理】原理笔记
    随便记点防止期末烂掉语法分析直接左递归的消除实际就是左递归转右递归法1:直接替换\[A\rightarrowA\alpha|\beta\Rightarrow\begin{cases}A\rightarrow\betaA',\\A'\rightarrow\alphaA'|\epsilon\end{cases}\]法2:矩阵法前置知识:\[I=\begin{pmatrix}\epsilo......