首页 > 其他分享 >偏序问题学习笔记

偏序问题学习笔记

时间:2023-11-15 10:35:29浏览次数:33  
标签:偏序 标记 笔记 贡献 学习 CDQ 一段 区间

前提

给若干个 \(n\) 维的点,对于每个点求出每一维均小于等于它的点的数量。

按字典序排序,然后预处理相同的点,这样后面的点不可能对前面的点产生贡献。

如果某个点后面有与其相同的点,那么当前点的贡献就会少算,所以我们需要提前在当前点的答案中加上后面与其相同的点的数量。

经过这样一通操作后,问题就变成了求前一个点前面的答案。

二维偏序

第一位单调不降,第二维用树状数组单点加一前缀求和维护。


考虑 CDQ 分治。

先将区间划分成两段,分别递归计算其内部的贡献,然后考虑前一段区间对后一段区间的贡献。

一开始整个区间第一维一定是单调不降的,第二维则是乱序的。在递归完成后,我们令两段区间第二维均是单调不降的,第一维则是乱序的。

因为递归前后并没有对区间进行任何修改,所以前一段区间第一维的最大值小于等于后一段区间第一维的最小值。而现在我们仅仅是考虑前一段区间对后一段区间的贡献,所以可以忽略第一维。

接着对两段区间分别维护一个指针,表示当前扫到哪里了。如果前一段区间指针指向的点的第二维小于等于后一段区间指针指向的点的第二维,说明前者可以对后者及其后面的所有点产生 \(1\) 的贡献,记录下来并将前一段区间的指针后移一位;否则说明后者已经不能被贡献到了,统计答案然后将后一段区间的指针后移一位。

返回时归并即可满足第二维要求。

三维偏序

依然上 CDQ 分治。做到第二维时,先不统计贡献,而是将点打上标记:前一段区间的点标记为 \(0\),后一段区间的点标记为 \(1\)。在处理完后,我们再次 CDQ 分治。

第二维在 CDQ 分治时同样有只能从前一段区间贡献到后一段区间的要求,所以只有标记为 \(0\) 的点才能贡献到后面标记为 \(1\) 的点。多判断一下即可按照相同的方法统计答案。

多维偏序

来总结一下:

  • 时刻保证只有前面的点对后面的点存在影响。
  • 当前忽略的这一维在上一次 CDQ 分治中变得单调不降。
  • 要统计的是前一段区间贡献到后一段区间,为当前 CDQ 分治打上属于哪个区间的标记。
  • 最终统计答案时,标记均为 \(0\) 的点能贡献到标记均为 \(1\) 的点,其余均无效。

注意在归并的过程中,如果两区间当前元素相等,要优先放前一段的点,否则就会破坏最初排序后对于相同元素的特殊处理,也就是要保证稳定性

标签:偏序,标记,笔记,贡献,学习,CDQ,一段,区间
From: https://www.cnblogs.com/landsol/p/17830622.html

相关文章

  • 密码学笔记
    密码算法:对称密码算法、非对称密码算法、摘要算法对称密码算法:加密秘钥和解密秘钥相同的密码算法又称秘密秘钥算法或单秘钥算法分组密码算法(BlockCipher):块加密算法将明文拆分为N个固定长度的明文块用相同的秘钥和算法对每个明文块加密得到N个等长的密文块然后将N个......
  • Python+PlayWright+ Pytest + Allure 自动化学习路线
    前言对于自己写过文章的总结,并不代表最好的学习路线还未完结,努力更新中ing建议把每节的实战演练做一下 PlayWrightPlayWright-环境安装PlayWright-如何使用playwrighPlayWrigh-同步和异步运行PlayWright-深入异步PlayWright-元素定位PlayWright-文本输......
  • Python学习一基础语法3——input的应用和注释
    #语法结构:input("提示信息")提示信息是告诉用户需要你做什么name=input("请输入您的姓名:")print('您的姓名是:'+name)num=input('请输入您的幸运数字:')print('您的幸运数字是:'+num)#能够链接成功,说明num是字符串类型'''这是多行注释print能用连接符链接的是......
  • uniapp开发笔记
    控件toast控件uni.showToast({icon:'none',title:'输入topic'})注意点引入图片需要的注意事项图片的宽度不能是auto相对路径和绝对路径绝对路径要以/开头示例代码{bigUrl:"static/image/img/Children.jpg",data:[{......
  • 34课笔记
     ......
  • springboot 注解学习之——@SpringBootApplication
    springboot注解学习之——@SpringBootApplicationspringboot版本3.1.5@Inherited//不认识的注解,顺便学习,字面意思:继承@SpringBootConfiguration//字面意思:SpringBoot配置@EnableAutoConfiguration//字面意思:可以自动配置@Inherited它是一个元注解(就是用来声明注解......
  • openGauss学习笔记-123 openGauss 数据库管理-设置账本数据库-账本数据库概述
    openGauss学习笔记-123openGauss数据库管理-设置账本数据库-账本数据库概述123.1背景信息账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。当用户创建防篡改用户表时,系统将自动为该表添加一个hash列来保存每行数据的hash摘要信息,同时在blockc......
  • 《人机交互:以用户为中心的设计和评估》阅读笔记一
    人机交互学(humen-computerinteraction,HCI)是一门关于设计和评估以计算机为基础的系统而使这些系统能够最容易地为人类所使用的学科。以用户为中心的设计和评估的最基本思想就是将用户时时刻刻摆在所有过程的首位。在产品生命周期的最初阶段,产品的策略应当以满足用户的需求为基本......
  • 《软件工程导论》读书笔记2
    在当今这个信息化时代,软件已经成为我们生活中不可或缺的一部分。从手机应用到大型系统,软件无处不在。为了更好地理解和掌握软件开发的过程和方法,我阅读了《软件工程导论》这本书。以下是我在阅读过程中的一些心得体会和收获。软件工程的定义和目标软件工程是一门研究如何有效......
  • 转发学习
    无论是什么芯片方案,普通厂家转发能做的就是发现问题,报告给sdk厂家,sdk厂家让你帮忙复现,找规律,把问题解决。sdk厂家出patch,你帮忙验证,我们好像也做不了很多事情,最多就是可以听懂人家说的话的大概意思,陪着人家一块查问题。牛一点的,可以大致看懂代码的逻辑。主要的还是内核的代码,n......