当前位置: 首页 > news >正文

CDQ分治

一、解决偏序问题

不言即默认非严格偏序问题。

严格偏序,未有此题。
若汝要学,小点三维。
\(a\) 者并,\(b\) \(c\) 小改。
幸甚至哉,歌以咏志。

三维偏序

按第一维排序,通过只计算左对右造成的贡献来满足第一维偏序条件。
第二维对于左右两个区间分别独自按第二维排序然后双指针,满足第二维偏序条件。
第三维用权值树状数组的位置,并用前缀和形式解决第三维偏序条件并顺便统计答案。

多维偏序

k 维偏序可用 \(CDQ^{k-2}\) 解决,复杂度 \(O(n\ \log^{k-1}\ n)\)

以四维偏序为例:

\(\operatorname{cdq1}(l,r)\)

先按 \(a\) 排序
\([l,mid]\)\((a,b,c,d)\) 变成 \((0,b,c,d)\)
\([mid+1,r]\)\((a,b,c,d)\) 变成 \((1,b,c,d)\)
然后令 \(\operatorname{cdq2}(l,r)\) 中只能 \(0\)\(1\) 造成贡献,一 \(ok!\)
然后以 \(b\) 为第一关键字排序,令 \(\operatorname{cdq2}(l,r)\) 中只能 \([l,mid]\)\([mid+1,r]\) 造成贡献,二 \(ok!\)

\(\operatorname{cdq2}(l,r)\)

\(c\) 排序 + 双指针,三 \(ok!\)
\(d\) 插入权值树状数组,四 \(ok!\)


问:那我问你那我问你,多维偏序就这样一直给前几维附 0、1,那我三维偏序为啥写单调队列和树状数组?

三维偏序——去单调队列 \(O(n\ \log\ n \ \log \ k)\)
三维偏序——CDQ 套 CDQ \(O(n\ \log^2\ n)\)
注:普通三维偏序是 \(O(n\ \log\ n \ \log \ k)\)

答:因为写的人多,你可以选择你的御用写法。


注意 5 维偏序就已经是恐怖的 \(O(n \log^4n)\) 了!
苦心哥天不负,四个老哥可吞吾。

二、优化 1D DP

小说

1D DP:状态数为 \(O(n)\) ,一次转移为 \(O(n)\)

显然这种 DP 暴力是 \(O(n^2)\),有时可以用 CDQ 降到 \(O(n \ \log^{k-1} \ n)\)\(k\) 维偏序)。

中说

一般 CDQ 优化的 DP 转移形似偏序,\(k\) 维偏序也可以优化 DP。
例如:二维最长上升子序列。
此时转移式子形似三维偏序(\(i\)\(a_i\)\(b_i\))。
关于 DP 值我们可以想办法在树状数组上解决。
此时我们注意要先 cdq(1,mid),sort(l,mid,cmp2),sort(mid+1,r,cmp2),solve(l,r)sort(mid+1,r,cmp1),cdq(mid+1,r)
反证:假设 \(l<mid+1\le k<j\le r\)\(f_j\) 先在 \([mid+1,r]\) 更新,再在 \([l,mid]\) 更新,\(f_j\)\([mid+1,r]\) 里用来更新的 \(f_k\) 不是 \(f_k\) 最终的值,证毕。

小综上——附四维偏序优化 1D DP 码:

bool cmp1(xxx x,xxx y) {return (x.a==y.a)?((x.b==y.b)?((x.c==y.c)?(x.d<y.d):(x.c<y.c)):(x.b<y.b)):(x.a<y.a);}
bool cmp2(xxx x,xxx y) {return (x.b==y.b)?((x.c==y.c)?((x.d==y.d)?(x.a<y.a):(x.d<y.d)):(x.c<y.c)):(x.b<y.b);}
bool cmp3(xxx a,xxx b) {return (a.c==b.c?a.d<b.d:a.c<b.c);}
void cdq2(int l,int r)
{if(l==r) return ;int mid=(l+r)>>1;cdq2(l,mid),sort(d+l,d+mid+1,cmp3),sort(d+mid+1,d+r+1,cmp3);int i=l;for(int j=mid+1;j<=r;j++){while(d[i].c<=d[j].c&&i<=mid) ((!d[i].ok)?gai(d[i].d,d[i].ans):void()),i++;if(d[j].ok) d[j].ans=max(d[j].ans,cha(d[j].d)+d[j].cnt);}qing(l,i-1),sort(d+l,d+r+1,cmp2),cdq2(mid+1,r);
}
void cdq1(int l,int r)
{if(l==r) return ;int mid=(l+r)>>1;cdq1(l,mid);for(int i=l;i<=mid;i++) d[i].ok=0;for(int i=mid+1;i<=r;i++) d[i].ok=1;sort(d+l,d+r+1,cmp2),cdq2(l,r),sort(d+l,d+r+1,cmp1),cdq1(mid+1,r);
}

\(甄雨村\)

主要特征:将 \(2^i\) 形区间打包给后面的 dp 数组转移。

三、斜率优化套 CDQ

快进到 \(y=kx+b\) 表示后:
这种斜率优化在转移 \(f_i\) 时总有 \(j<i\) 的限制,因为这会让 \(i\) 的增长很重要,进而让 \(x\)\(k\) 数组的单调性很重要:
(以下为均摊)
如果 \(x\) 单调,那么单调队列轻松 \(O(1)\) 维护凸包。
如果 \(k\) 单调,那么单调队列轻松 \(O(1)\) 找决策点。
如果 \(k\) 不单调,那么可以单调队列上二分劳累 \(O(log)\) 找决策点。
如果 \(x、k\) 不单调,那么可以平衡树独立(指没人帮你调)解决。

紫雾翻涌间,CDQ 踏着虚空符文缓步而出,黑袍无风自动,斗篷下摆流淌着液态的夜,跃动的分治形成绝对领域……
曰:“ \(x、k\) 不单调?蝼蚁……”

只用计算 \([l,mid]\)\([mid+1,r]\) 的贡献,维护 \([l,mid]\) 的凸包,在 \([mid+1,r]\) 上找决策点。

\([l,mid]\)\(x\) 排序,对 \([mid+1,r]\)\(k\) 排序。

(至于代码里为什么要先按 id 排序,这是 CDQ DP 必带的,因为第一维被打乱了)

注意

  • 实时修改询问可以把时间做一维。

  • 最后一维要放在权值树状数组里,所以有时要离散化最后一维。

  • 如果有重点要去重,原因是重点之间各有贡献,所以应不分先后,对此合并处理。(如果时间作为一维,那么肯定无重点)

  • 以三维偏序为例,如果先 cdq(1,mid),sort(l,mid,cmp2),sort(mid+1,r,cmp2),solve(l,r)sort(mid+1,r,cmp1),cdq(mid+1,r),注意最后一个 sort(mid+1,r,cmp1) 必加,否则在左对右时满足不了第一维偏序条件。(当然如果你勤劳,可以拿一个数组存下上次按 \(\operatorname{cmp1}\) 排好序的数组,就可以少 \(\operatorname{sort}\) 几次——常数优化)。

请刷:

相关文章:

CDQ分治

一、解决偏序问题 不言即默认非严格偏序问题。 严格偏序,未有此题。 若汝要学,小点三维。 同 \(a\) 者并,\(b\) \(c\) 小改。 幸甚至哉,歌以咏志。 三维偏序 按第一维排序,通过只计算左对右造成的贡献来满足第一维偏序条件。 第二维对于左右两个区间分别独自按第二维排序然…...

开源AI大模型、AI智能名片与S2B2C商城小代码:从“不出现=不存在”到“精准存在”的数字化转型路径

开源AI大模型、AI智能名片与S2B2C商城小代码:从“不出现=不存在”到“精准存在”的数字化转型路径pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…...

202509 组合数学与计数类 DP 笔记

1. P2051 [AHOI2009] 中国象棋 一格一格进行考虑做 DP 想不出来,考虑到一行实际上只需要选两格进行操作,因此可以一行一行操作。 设 \(f_{i,j,k}\) 表示考虑到第 \(i\) 行,有 \(m-j-k\) 列有 \(0\) 个棋子,有 \(j\) 列有 \(1\) 个棋子,有 \(k\) 列有 \(2\) 个棋子。边界条…...

edu 106 E(LCS dp + 多源bfs优化)

E 先考虑对两个固定串怎么做:可以确定形成串的末尾一定是 \(a_{i}\) 或者 \(b_{j}\),直接子序列 \(dp\) 即可:\(dp_{i,j,0/1}\) 表示只考虑 \(a\) 长度为 \(i\) 的前缀和 \(b\) 长度为 \(j\) 的前缀,\(0\) 表示形成的串以 \(a_{i}\) 结尾;\(1\) 表示形成的串以 \(b_{j}\) …...

ABC310E NAND repeatedly 题解

https://atcoder.jp/contests/abc310/tasks/abc310_e 一个奇怪的递归式 + \(N \le 10^6\), 试试动态规划 设 \(dp_{i,j}\) 为对于所有 \(1 \le l \le i\) 满足 \(f(l, i)=j\) 的数量, 其中 \(j \in \{0,1\}\). 最后答案就是 \(\sum\limits_{i=1}^{n}dp_{i,1}\) 分情况讨论:当 \…...

MyBatis插入语句配置

MyBatis 插入语句配置 <sql id="Manage_field"> id,userName,passWord,realName</sql> <!-- 实体类属性--><sql id="Manage_insert">#{id},#{userName},#{passWord},#{realName}</sql><insert id="insert" …...

操作运算符

package _caseimport "fmt"// 关系运算 func RelationCase() {var a = 21var b = 10fmt.Println("a == b", a == b)fmt.Println("a != b", a != b)fmt.Println("a > b", a > b)fmt.Println("a < b", a < b)fmt.…...

看 NOI2025 游记记

我很久以前看过 50+ 篇让我印象深刻的 NOI 游记,里面有句话让我在看游记前的某次梦里想起:“看游记好爽,心潮在荡漾”。 Day0(2025.7.31) 状态不是很好,看了几篇游记复习了一下。 Day1(2025.8.1) 早上 6:15 起床,6:30 到机房,老师宣读早读板子,登上洛谷,我迅速打开…...

整体二分

前言 注意:以下的 “元素” 都代表原题中的一个操作。 大说 把当前值域一分为二,把当前元素集合,每个元素的决策只有左区间 or 右区间,可以把同决策的元素放在一起去分治子区间(类似于线段树的结构)。 如下图(左边是值域区间,右边是元素集合):上图每个询问的答案: ①…...

得力 - Bruce

@echo off title Win10 游戏下载速度优化脚本 echo ===================================== echo Win10 游戏下载慢 - 优化工具 echo (请以管理员身份运行) echo ===================================== echo.:: 关闭 Windows 更新的传递优化 echo [1/6] 正在关闭 Windows …...

短视频营销运营导师张伽赫,绳木传媒AI+短视频引领企业数字化变革

在当下企业数字化转型的浪潮中,短视频营销已成为关键赛道。张伽赫,这位深耕短视频领域十年的实战派导师,同时也是东莞绳木传媒的创始人,凭借 “AI+短视频” 的创新模式,在行业内异军突起,为众多传统企业提供了数字化转型的全新思路与解决方案。一、方法论革新:从流量思维…...

详细介绍:还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”

详细介绍:还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…...

用 TensorFlow 和 CNN 实现验证码识别

在本教程中,我们将使用 TensorFlow 和 卷积神经网络(CNN) 来构建一个验证码识别系统。TensorFlow 是一个流行的深度学习框架,支持构建和训练神经网络。通过构建卷积神经网络(CNN),我们可以自动从图像中提取特征并执行字符分类任务。环境准备首先,我们需要安装 TensorFl…...

用 PyTorch 和 CNN 进行验证码识别

在本教程中,我们将使用 PyTorch 和 卷积神经网络(CNN) 来构建一个验证码识别系统。PyTorch 是一个广泛使用的深度学习框架,特别适合研究和原型设计。卷积神经网络(CNN)是处理图像数据的强大工具,它可以自动从图像中学习特征,并执行图像分类等任务。环境准备首先,确保你…...

用 Keras 和 CNN 进行验证码识别

在本教程中,我们将利用 Keras 和 卷积神经网络(CNN) 来构建一个验证码识别系统。Keras 是一个高层神经网络 API,它运行在 TensorFlow、Microsoft Cognitive Toolkit(CNTK)或 Theano 之上,能够让我们快速构建深度学习模型。CNN 是一种常用于图像识别任务的深度学习架构,…...

从 Bank Conflict 数学表示看 Buffer 设计 Trade-Off

在并行处理器设计中,我们希望最大化访存吞吐,让更多的数据分布在不同的 bank,而非在一个 bank 中产生堵塞。一种场景是面对多应用并行,这往往可以通过划分上下文基地址隔离;而另一种场景则是高并行同一个数据共用基地址,本文针对该场景下常见情形 Tensor Data Layout 进行…...

被彼此笼罩 任泪水将我们缠绕 深陷入恶魔的拥抱 在阴冷黑暗处灼烧 吞下这毒药

方格染色grid 不难发现按着行顺着来,odt 那样维护即可。数字图graph 为什么本可做这个题做了很久(? 首先显然可以二分降低难度,然后就是观察。...

mysql无法连接服务器的mysql #mysql8

1、云服务器要开放tcp 3306端口 登录云服务器提供商的,添加开放端口2、配置mysql允许非本地连接 编辑:/etc/my.cnf 或(如果配置了不生效) /etc/mysql/mysql.conf.d/mysqld.cnf 修改: ... [mysqld]bind-address = 0.0.0.0 ... 验证:mysql> SHOW GLOBAL VARIABLES LIKE …...

DAG 最小路径覆盖问题 笔记

原来我还学过这么个玩意。 一、笔记 P2764 最小路径覆盖问题 首先让 \(n\) 个点每个点都是单独的一条路径,接着考虑合并路径。 把每个点拆成只有入度的点和只有出度的点,合并就相当于连接一个只有出度的点和另一个只有入度的点。 显然合并完成后每个拆开的点都最多只能连一条…...

SP3D c# 开发独立的exe

此方法避免了启动S3D的过程 S3D.net API允许编写独立应用程序,即外部自动化TaskHost可执行文件。 在独立应用程序中可以编写哪些自动化?检查自动化-检查对象/数据,并采取一些行动,如生成报告文件/输出文件。数据挖掘-对对象和相关对象进行一些数据处理/数据挖掘,生成报告。…...

python错误code

没有遍历完,就打印了结果模拟商品购物shopp_user = [] user_buy = [] for i in range(0,5):name_shop = input("请输入商品名称:")shopp_user.append(name_shop)for i in shopp_user:print(i)while True:user_choose=input("请输入购买的商品编号:")# 输入…...

瑞 ping 我

ping瑞 ping 我...

java八股文笔记 - 指南

java八股文笔记 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 1…...

NOIP 模拟赛十六

BIT/构造+DP+bitset/DP+平衡树/欧拉序A. 发现答案只有 \(0, 1, 2\) 三种。 将 \(0\) 直接判掉,\(1\) 可以通过树状数组+双指针解决。 记 \(k\) 为需要减少的逆序对数量。 具体的,枚举左端点 \(l\) ,加入右端点 \(r\) ,判断逆序对数 \(cnt\) 是否 \(\ge k\) ,如果是,结束。…...

【AT_dp_y】Grid 2 - Harvey

题意 要求从 \((1,1)\) 走到 \((n,m)\),不能经过障碍物,问方案数。 \(1 \leq n,m \leq 10^5,1 \leq k \leq 3000\)。 思路 首先先解决弱化版,若没有障碍物的方案数,显然是 \(\binom{n+m-2}{n-1}\)。 则我们可以用总 - 非法,考虑经过多少个障碍物进行容斥。 如果按个数去枚…...

C#十五天 026多态重写 027抽象类与开闭原则 028接口,依赖反转,单元测试

在类的重写当中 父类需要加入一个关键字叫:Virtual,子类需要加一个关键字叫:override例: 父类 public virtual void FuLei(){} 子类 public override void ZiLei如果用父类变量去引用子类实例不用v和o的话就叫隐藏这样声明的实例方法还是运行父类方法,加了o和v的才…...

解题报告-P11844 [USACO25FEB] Friendship Editing G

P11844 [USACO25FEB] Friendship Editing G 题目描述 Farmer John 的 \(N\) 头奶牛编号为 \(1\) 到 \(N\)(\(2\le N\le 16\))。奶牛之间的朋友关系可以建模为一个有 \(M\)(\(0\le M\le N(N-1)/2\))条边的无向图。两头奶牛为朋友当且仅当图中她们之间存在一条边。 在一次操作…...

CSP-S模拟23

\(T1:\) 选彩笔(rgb) 思路: 签到题 (但是没签上),二分答案,在写一个三维前缀和\(check\)一下就搞定了。如果忘记三维前缀和的话,请看这里 代码:$code$ #include<iostream> using namespace std; const int N=1e4+5; int n,m,b,g,r,x,y,z,ans,num,maxn,sum[260]…...

CF1413F Roads and Ramen

结论是,路径中有一个端点是直径端点。 你这么想,设 \(dis_i\) 为 \(1\) 到 \(i\) 的 \(1\) 的个数,如果对于一条直径 \(p \to q\),若 \(dis_p = dis_q\) 直接取直径即可。 否则,对于每个点 \(u\),总有 \(p, q\) 中的一个与其 \(dis\) 相等,一个点到直径端点的距离最远,…...

复现The Annotated Transformer代码时遇到的问题和相关链接

The Annotated Transformer原网页:The Annotated Transformer The Annotated Transformer源代码:harvardnlp/annotated-transformer 《The Annotated Transformer》环境配置-CSDN博客 调试The Annotated Transformer_annotatedtransformer.ipynb-CSDN博客# 创建虚拟环境 cond…...

Node.js 文件上传中文文件名乱码难题,为什么只有Node会有乱码困难,其他后端框架少见?

Node.js 文件上传中文文件名乱码难题,为什么只有Node会有乱码困难,其他后端框架少见?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…...

lc1030-距离顺序排列矩阵单元格

难度:简单(后期)题目描述官方把题目描述得稀烂 左上角为 (0, 0),n x m 的点阵(屏幕坐标系,x轴向下,y轴向右) 给定其中一点 p,所有点按到 p 的曼哈顿距离排序示例 输入:rows = 1, cols = 2, rCenter = 0, cCenter = 0 输出:[[0,0],[0,1]]输入:rows = 2, cols = 2, r…...

说的道理。

说的道理。说的道理。 ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽…...

【abc180F】Unbranched - Harvey

题意 问有多少个满足以下条件且有 \(n\) 个点 \(m\) 条边的图:没有自环 每个点的度最大为 \(2\)。 最大的连通块大小恰好为 \(L\)。思路 首先分析:由于每个点的度最大为 \(2\),所以可以判断每个联通块要么是链,要么是环。 所以可以设计状态 \(f_{i,j}\) 表示有 \(i\) 个点,…...

合并区间-leetcode

题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,…...

两种判断计算机大小端模式的方法

两种判断计算机大小端模式的方法 在计算机系统里,数据存储有大端和小端两种模式。大端模式是高字节存在低地址,小端模式是低字节存在低地址。下面结合相关知识,用两种 C 语言方法判断大小端。 一、知识铺垫 (一)大小端存储规则大端存储(Big - Endian):数据的高字节存储…...

ROS2之节点

什么是节点? 在ROS2(机器人操作系统2)中,节点(node)是执行程序的基本单元,也是构成整个机器人系统的核心“积木”。你可以把它理解为系统中一个独立、可执行的进程,每个节点都专注于完成一个特定的、单一的功能。这种设计哲学让复杂的机器人系统变得模块化,易于开发、…...

9.17日总结

完成hbase部署和测试,开始搞hbase客户端...

ECT-OS-JiuHuaShan 框架,元推理AGI奇迹

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891 ▮ 推理就绪:基于自然辩证法数学形式化系统启动因果律算符 ECT-OS-JiuHuaShan 框架的诞生,绝非一次普通的技术迭代,它是文明进程中一个前所未有的 “确定性奇点”(Deterministic Singularity)——从此,智能的发…...

Mapper与Mapper.xml的关系

Mapper与Mapper.xml的关系简单直接的回答是:它们之间是“接口定义”与“SQL映射实现”的关系。 ManageMapper 是一个 Java 接口,它定义了数据库操作的方法签名;而 ManageMapper.xml 是一个 XML 文件,它提供了这些方法签名所对应的具体 SQL 语句实现。MyBatis 框架在运行时通…...

Rocky Linux10.0安装zabbix7.4详细步骤 - 教程

Rocky Linux10.0安装zabbix7.4详细步骤 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !i…...

【P3158】放棋子 - Harvey

题意 有 \(c\) 种棋子,每种棋子都有相应的个数,要把全部棋子放入棋盘中,使得每一行和每一列没有颜色相同的棋子,求方案数。 思路 从行和列的角度显然不好处理,所以我们可以先从颜色的种类入手。 设计 \(f_{c,i,j}\) 表示前 \(c\) 种颜色,已经有 \(i\) 行,\(j\) 列被占领…...

最强AI语音克隆和文本配音工具!与真人无异,CosyVoice下载介绍

CosyVoice是一个大规模预训练语言模型,深度融合文本理解和语音生成的一项新型语音合成技术,能够精准解析并诠释各类文本内容,将其转化为宛如真人般的自然语音 CosyVoice采用了总共超15万小时的数据训练,依托先进的大模型技术进行特征提取,从而完成声音的复刻,用户无需训练…...

近日C++线上练习结果

...

密力根油滴实验实验报告

...

Linux 系统插入U盘/移动硬盘实现自动挂载

在 /etc/udev/rules.d/ 目录下建立挂载规则 文件名后缀为 xxx.rulesKERNEL=="sd[a-z][1]", ACTION=="add", SUBSYSTEMS=="usb", SUBSYSTEM=="block", RUN{program}+="/usr/bin/systemd-mount --no-block --collect -o uid=1000,g…...

来点人瑞平我

不知道自己定位了,来帮助我找找(...

日总结 2

老师同样为学期初开了个头,没有讲什么重要是知识。我这天完成了Linux的安装和配置,完成了安装hadoop需要的环境配置和jdk的配置,为hbase的使用安装做铺垫。...

概率论第一章部分习题

...

日常 3

老师为我们讲解了真正的软件开发的环境,听完老师的讲解,我认为我需要学习C#相关的知识,扩展自已以后的选择。课余时间我完成了Hadoop的安装和环境配置,同时花了大部分时间安装配置yarn,但失败了,研究半天没发现哪里配置有问题但就是无法启动。心灰意冷,明天安装和学习hb…...