首页 > 其他分享 >离线分治(cdq)

离线分治(cdq)

时间:2023-02-03 11:00:32浏览次数:39  
标签:树状 分治 离线 算法 cdq 数组 排序


离线分治主要是一类用于解决数据结构类型题目的算法,顾名思义,这种算法是一类离线解决问题的分治算法.

离线,意味着题目必须能够提前预知整个操作序列而不是只能回答一个操作后才能知道下一个操作,所以在线的题目就用不了这个算法啦,赶紧去写毒瘤有趣的树套树和可持久化数据结构吧!

离线分治算法主要有两种:cdq分治和整体二分.接下来写一下二分.

CDQ

CDQ问题的经典实现是偏序问题,即对于给定的ii有ai,bi,ci,..ai,bi,ci,.. 且有形如(下面)的条件,问满足条件的(i,j)(i,j)有几个

ai<aj

bi<bj

ci<cj

.....

算法思路

假如只有一维,我们容易想到直接排序即可,每个ii对它后面的数有贡献1(其实每个ii收到的贡献就是i,答案直接就是∑n1)。 
假如有两维,我们先排序,把aiai当做下标,这就是经典的逆序对(顺序对)问题,我们这里只讨论顺序的情况!经典的方法之一是使用树状数组,每个bibi对大于它的bjbj有贡献,哈希记在树状数组里就行了,每次更新完树状数组后查询i位置的值,这就是贡献(因为前面的b′<bi才是a′<aii的)。 
但是更常见的方法是使用归并排序bibi,用类似的思想,还是先按aa排序每次分治左右区间,回溯时统计左区间对右区间的影响(此时的左右区间是已经排序完了的,归并的过程中进来的是左边则tot++tot++,进来的是右边则ans+=tot,原理同上,因为归并只有每次的左边对右边答案的贡献,所以是不会重复的) 
到了三维,我们是不是可以考虑把分治和树状数组联系起来搞一搞呢,一维排序,二维分治,三维树状数组,只是更新最后无脑tot++变成“归并的过程中进来的是左边则更新树状数组,进来的是右边则查询树状数组” 
其实也可以只用分治,这种分治的名称就叫做CDQ分治,它的准确定义是用一个子问题去更新另一个子问题,于是它具有嵌套的能力,四五维偏序也可以搞了

画外音

其实很多时候,那种查询+更新二维区间的东西,看起来是两维其实这种东西是三维偏序!因为有一层隐藏的维度是时间,这时候不需要初始化排序了,直接做就行 
写这种题要先把题目转化为最经典的模型,n维偏序,看着不等式写CDQ分治!

cdq分治是一种基于时间的离线分治算法,也就是说它是在对时间进行分治.

 


标签:树状,分治,离线,算法,cdq,数组,排序
From: https://blog.51cto.com/u_15952369/6035596

相关文章

  • 下载ansible离线包
    安装源[root@TimeSync~]#yuminstall-yyum-utilsepel-release创建目录[root@TimeSync~]#mkdir-p/root/ansible下载软件[root@TimeSync~]#yuminstall-y--d......
  • 离线安装docker
    1、先下载docker的安装包下载地址:https://download.docker.com/linux/static/stable/x86_64/这里我们下载docker-19.03.9.tgz,然后上传到服务器上解压tar-zxvfdocker-1......
  • linux离线部署python项目
    离线部署直接在内网隔离的环境中。不能直接pipinstall或者apt-getinstall(Ubuntu、Debain)准备:与离线环境相同版本的服务器Python(web)项目依赖pipwheel强大的pip命......
  • 离线强化学习在序列决策中的应用
    从样本利用效率,看强化学习的分类on-policy:每次更新策略需要在重新收集数据,更新数据来自于当前策略,行为策略和目标策略是同一个策略off-policy:行为策略和目标策略不......
  • 百度离线地图地点搜索 离线地图poi搜索
    1.场景和需求:在局域网开发的web项目,不能连接公网1需要使用离线地图展示设备点位;2需要实现地图的城市范围内的离线搜索,可以检索到百度地图上的点位,类似与百度地图首......
  • CF1400E Clear the Multiset 题解 贪心+分治
    题目链接:http://codeforces.com/problemset/problem/1400/E题目大意:给定一个长度为\(n\)数列\(\{a_n\}\),你可以进行如下操作:操作1:任意选择一个区间\([l,r]\),使区间内......
  • 离线环境解决maven编译外网下包问题
    引言近日一直忙着做持续集成,处于安全性考虑,需要在离线环境运行。项目依托Jenkins做Java/Python/Vue等工程的镜像构建,其中Java工程基本基于Maven,在外网条件下通过IDEA或者m......
  • centos7.9离线安装mysql5.7.40(本文使用initialize-insecure安装方法)
    centos7.9离线安装mysql5.7.40(本文使用initialize-insecure安装方法)一、卸载CentOS7系统自带mariadb#查看系统自带的Mariadb[root@NIWAY-190~]#rpm-qa|grepmariadbm......
  • zabbix-agent 离线安装5.0 centos7
    Centos7离线安装zabbix客户端环境:Centos7.71.下载离线安装包下载地址:http://repo.zabbix.com/zabbix在上述打开的页面中,依次选择版本号,环境,OS版本以及OS处理器型号。这......
  • 离线部署yum依赖
    利用本地源解决在无网环境部署应用需要解决的问题:应用需要哪些软件包?如何把应用依赖的软件包制作成一个精简的本地源?如何使用本地源?第一个问题使用yum-utils解决,它......