Day10 CDQ 分治

三维偏序

CDQ 分治入门题。

采用分治思想,对于编号在 [ l , r ] [l,r] [l,r] 中的点对,统计都在 [ l , m i d ] [l,mid] [l,mid] 的,都在 [ m i d + 1 , r ] [mid+1,r] [mid+1,r] 的,再统计跨两个的。

代码

iai 统计三元组

严格小于的三维偏序。

一般的三维偏序去重是因为相同的元素之间可能产生贡献,此题相同元素不会产生贡献,不用去重。

SOL1:

容斥。

统计第一维小于等于,后面两维严格小于的个数,时间复杂度 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)

对于第一维相同的,做严格小于的二维数点,时间复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn)

时间复杂度 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)。代码

SOL2:

在 CDQ 递归的时候,改变 mid 的位置,使得右区间第一维严格大于左区间。

新划分的 mid 不一定在中间,时间复杂度不会证,但举不出反例。

[SDOI2011] 拦截导弹

离散化是显然的。

f 1 ( i ) f_1(i) f1(i) 表示 i i i 开始的 LDS, f 2 ( i ) f_2(i) f2(i) 表示 i i i 结尾的 LDS。

g 1 ( i ) g_1(i) g1(i) 表示 f 1 ( i ) f_1(i) f1(i) 的方案数, g 2 ( i ) g_2(i) g2(i) 表示 f 2 ( i ) f_2(i) f2(i) 的方案数。

f , g f,g f,g 的转移比较显然。

第一问: max ⁡ ( f i ) \max(f_i) max(fi),正着反着都行。

第二问:

先求总方案数,即 f f f 能达到 LDS 的 i i i g g g 的和。

再求 LDS 经过 i i i 的方案数。这个时候从 i i i 开始和以 i i i 结尾的都要是 LDS, i i i 应满足 f 1 ( i ) + f 2 ( i ) − 1 f_1(i)+f_2(i)-1 f1(i)+f2(i)1 为 LDS,方案数 g 1 ( i ) × g 2 ( i ) g_1(i) \times g_2(i) g1(i)×g2(i)。概率就是这个除以总方案数。

朴素做显然是 O ( n 2 ) O(n^2) O(n2) 的。

三维偏序 dp ,CDQ 优化。

f 2 f_2 f2 为例, f 2 f_2 f2 的转移编号从小到大。因此先遍历左区间,用左区间的值转移更新右区间,再遍历右区间。

转移过程为先按一维排序,然后就是二维数点求最大值。其中需要维护区间最值,单点修改,考虑 BIT / 线段树。

正反跑两遍。总时间复杂度 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)

注意点

  • 一般的 CDQ 在遍历当前区间时可以保证当前区间一维是有序的。

    这里的 CDQ 由于左中右的处理顺序,遍历右区间时要将右区间排序。

  • 一些分支语句更新的时候要注意先后顺序。

记录

[BalkanOI2007] Mokia 摩基亚

在线的二维数点。 加一维时间,变成离线的三维偏序。

一发就过了。记录

[HEOI2016/TJOI2016] 序列

由于是任意一种变化,应考虑极值。注意任意时刻只有一种变化。

f i f_{i} fi 表示以 i i i 结尾的合法子序列长度。

f i = max ⁡ f j + 1 f_i = \max f_j +1 fi=maxfj+1,其中 j < i , a j ≤ m i n ( a i ) , max ⁡ ( a j ) ≤ a i j <i,a_j \le min(a_i), \max(a_j)\le a_i j<i,ajmin(ai),max(aj)ai

三维偏序的 dp 问题,考虑 CDQ 优化。

代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2022安装教程(英文版)

文章目录 1.下载安装 1.下载 官网地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 选择第一个社区版本&#xff1a;Community 2022 安装 1.将下载好的文件保存到桌面&#xff0c;双击点开 2.等待visual studio installer配置好 3.点击安装后会来到配件选…

搭建本地开发服务器

搭建本地开发服务器 :::warning 注意 在上一个案例的基础上添加本地开发服务器&#xff0c;请保留上个案例的代码。如需要请查看 Webpack 使用。 ::: 搭建本地开发服务器这一个环节是非常有必要的&#xff0c;我们不可能每次修改源代码就重新打包一次。这样的操作是不是太繁琐…

Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑

Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑 现在想对一个接口做性能测试&#xff0c;需要测试它多个线程并发下的调用 1.新建测试计划和线程组 略 2.新建http接口 一个完整的http接口包含请求头和请求&#xff0c;这里就需要两个组件&#xff1a;HTTP request、HT…

clickhouse功能使用

离线聚合 物化视图 clickhouse需在AggregatingMergeTree之上建立物化视图来完成聚合的效果。以小时聚合为例说明 首先创建表,此处是本地表,且没有副本 #创建表 CREATE TABLE datasets.bt_stats (`btname` String,`record` UInt64,`EventTime` DateTime

群狼调研(湖南市场调查公司):4S店神秘顾客调查注意事项

群狼调研(湖南市场调查公司)受顾客委托开展汽车汽车4S店神秘顾客调查&#xff0c;汽车4S店神秘顾客调查执行注意事项&#xff1a; 1. 保持匿名性&#xff1a;作为神秘顾客&#xff0c;确保自己的身份和目的不被店员发现。不要透露自己是进行调查的顾客。 2. 准备充分&#xf…

【iOS】RunLoop

前言-什么是RunLoop&#xff1f; 什么是RunLoop? 跑圈&#xff1f;字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…

ChatGPT实战:创业咨询,少走弯路,少踩坑

用九死一生形容创业再适合不过&#xff0c;不过一旦成功回报也很诱人&#xff0c;这也是为什么那么多人下场创业。纸上得来终觉浅&#xff0c;绝知此事要躬行&#xff0c;创过业的人都知道其中的心酸&#xff0c;而他们也建议你去创业&#xff0c;因为那真不是一般人能干的事。…

微服务详解

微服务 什么是微服务&#xff1f; 微&#xff1a;单个服务的设计&#xff0c;所有参与人从设计、开发、测试、运维所有人加起来只需要两个披萨就够了 服务&#xff1a;一定要区别于系统&#xff0c;服务一个或者一组相对较小且独立的功能单元&#xff0c;是用户可以感知的最…

力扣17(电话号码中的字符组合)

题目表述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例1 输入&#xff1a;digits "23" 输出&#xff1…

SpringBoot集成百度人脸识别实现登陆注册功能Demo(二)

前言 上一篇SpringBoot集成百度人脸demo中我使用的是调用本机摄像头完成人脸注册&#xff0c;本次demo根据业务需求的不同我采用文件上传的方式实现人脸注册。 效果演示 首页 注册 后端响应数据&#xff1a; 登录 后端响应数据&#xff1a; 项目结构 后端代码实现 1、Bai…

数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)

目录 数字关键词的散列函数构造 直接定址法 除留余数法 数字分析法 折叠法 平方取中法 字符关键词的散列函数构造 ASCII码加和法 前三字符移位法 移位法 数字关键词的散列函数构造 一个“好”的散列函数一般应考虑下列两个因素&#xff1a; 计算简单&#xff0c;以…

QT生成可执行文件的步骤

QT生成可执行文件的步骤 第一步&#xff1a;debug为release&#xff0c;然后进行编译 第二步&#xff1a;添加QT生成必要的库 首先&#xff0c;建立一个新的文件夹&#xff0c;然后将Release中的可执行文件拷贝到新的文件夹中 然后&#xff0c;在新建文件夹中生成必要的库 …

Nginx(1)

目录 1.Nginx概述2.Nginx的特点3.Nginx主要功能1.反向代理2.负载均衡 1.Nginx概述 Nginx (engine x) 是一个自由的、开源的、高性能的HTTP服务器和反向代理服务器&#xff0c;也是一个IMAP、POP3、SMTP代理服务器。 Nginx是一个强大的web服务器软件&#xff0c;用于处理高并发…

别再被问倒了!Mysql索引竟然在这些情况下失灵?

嗨&#xff0c;亲爱的读者们&#xff01;小米又来啦~ 今天我们要聊一个在数据库面试中常常被问到的热门话题&#xff1a;Mysql索引失效。想要在面试中脱颖而出&#xff0c;掌握这个知识点可是必不可少哦&#xff01;废话不多说&#xff0c;咱们现在就深入剖析一下&#xff0c;看…

开源网络探测和安全评估工具nmap的实践

1.nmap简介 Nmap&#xff08;Network Mapper&#xff09;是一个广泛使用的开源网络探测和安全评估工具。它最初由Gordon Lyon&#xff08;也被称为Fyodor Vaskovich&#xff09;开发&#xff0c;并且在网络管理员、安全研究人员和黑客等领域被广泛应用。 Nmap具有许多功能&am…

C#,数值计算——基于模拟退火的极小化问题单纯形(下山)算法的计算方法与C#源程序

1 模拟退火 模拟退火算法其实是一个类似于仿生学的算法&#xff0c;模仿的就是物理退火的过程。 我们炼钢的时候&#xff0c;如果我们急速冷凝&#xff0c;这时候的状态是不稳定的&#xff0c;原子间杂乱无章的排序&#xff0c;能量很高。而如果我们让钢水慢慢冷凝&#xff0c…

小研究 - 微服务系统服务依赖发现技术综述(一)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…

pycharm中opencv库导入 cv2. 无函数提示跳出解决方法

pycharm中opencv库导入 cv2. 无函数提示跳出解决方法 1、找到当前解释器安装目录 例如&#xff1a; 2、进入D:\Python37\Lib\site-packages\cv2文件&#xff0c;进入cv2文件夹&#xff1a; 找到cv2.pyd, 把cv2.pyd复制一份&#xff0c;放到上层文件夹下&#xff0c;即site-p…

ElementUI主题颜色动态切换并缓存

今天给大家分享一下在Vue中使用ElementUI时&#xff0c;想切换主题颜色的两种方式。 第一种&#xff1a;静态改变项目中的主题颜色 比较简单&#xff0c;稍微带过&#xff1a; 项目中创建element-variables.scss文件&#xff0c;编写内容&#xff1a; /* 改变主题色变量 */ …

数据结构 | 二叉树的应用

目录 一、解析树 二、树的遍历 一、解析树 我们可以用解析树来表示现实世界中像句子或数学表达式这样的构造。 我们可以将((73)*(5-2))这样的数学表达式表示成解析树。这是完全括号表达式&#xff0c;乘法的优先级高于加法和减法&#xff0c;但因为有括号&#xff0c;所以在…