CDQ小结

2024-04-30 23:08
文章标签 小结 cdq

本文主要是介绍CDQ小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其实就是扩展归并排序。
适用于处理偏序问题。

算法

对于三维或以上偏序,我们采用CDQ分治。
第一个思想是排序。
先使第一维有序,然后将区间分成两半后两边各自按第二维排序,可以保证左一半的第一维小于右一半。
然后就可以对左右做类似归并排序的事情,用左边更新右边的答案。
更新过程中用树状数组保证第三维有序。

时间复杂度 O ( l o g n ∗ n l o g n ) = O ( n l o g 2 n ) O(logn*nlogn)=O(nlog^2n) O(lognnlogn)=O(nlog2n)


技巧

大概就是可以把一些二位数点问题变化为横纵坐标,时间的三维偏序问题处理。

对于高维偏序可以CDQ套CDQ,但是5维以上还不如K-D tree和n^2枚举。


题目

一.洛谷P4169 [Violet]天使玩偶/SJY摆棋子
因为是曼哈顿距离,只考虑 x ≤ q x , y ≤ q y x\leq qx,y\leq qy xqx,yqy的点中 x + y x+y x+y的最大值,然后旋转坐标系就可以统计到所有点。
我们将一个询问拆成了四个偏序问题,CDQ即可。


二.洛谷P5459 [BJOI2016]回转寿司
统计前缀和 A i A_i Ai,然后前缀和做差统计区间
保证 l < r , L < A r − A l − 1 < R l<r,L<A_r-A_{l-1}<R l<r,L<ArAl1<R
那么可以转化为 A l − 1 + L < A r < A l − 1 + R {A_{l-1}+L<A_r<A_{l-1}+R} Al1+L<Ar<Al1+R
但其实可以发现 l < r l<r l<r并没有什么用,因为前缀和是单调的
所以其实可以类似二维偏序 O ( n l o g n ) O(nlogn) O(nlogn)
或者采用不排序直接归并的CDQ实现

这篇关于CDQ小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950161

相关文章

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总