JOISC 2017 D

news/2025/1/7 13:57:04/文章来源:https://www.cnblogs.com/spdarkle/p/18654069

神题,模拟赛考到,不会,遂题解诞生。

读完题目,发现等价于给出若干 \([l_i,r_i],c_i\),需要将 \(c_i\) 分为 \(k,,c_i-k\) 两部分加到 \([l_i,r_i]\) 亦或 \([1,l_i)\cup (r_i,n]\),要求最小化最后每个位置的值的最大值。

可以考虑一个调整法的思路,我们先假定全部分给 \([l_i,r_i]\),得到当前的解 \(p_i\),同时将 \(c_i\) 拆分为 \(c_i\)\(l_i,r_i\) 相同且 \(c_i=1\) 的询问。

问题就变成给出一个集合,元素为区间,而我们现在需要从中找到一个最优秀的子集 \(S\),使得将 \(\forall [l_i,r_i]\in S\) 拆为 \([1,l_i-1],[r_i+1,n]\) 后最大值最小。

我们称这个拆解的过程为“反转”。

我们设这个拆分后每个位置上的值是 \(q_i\),那么会发现一些性质。

性质零

设最优答案为 \(ans\),则我们声称 \([ans,\sum c]\) 都是存在方案的。

证明是显然的, \(i\) 的一个没有覆盖最大值的区间覆盖过去就好了。

性质一

可以发现,若 \(I_1,I_2\in S\),且 \(I_1\cap I_2=\varnothing\),则 \(S\) 并非最优。

证明:考虑此时我们不反转 \(I_1,I_2\),则会让 \(q\) 产生如下变化:

  1. \(i\in I_1\cup I_2,q_i\leftarrow q_i\)
  2. \(i\notin I_1\cup I_2,q_i\leftarrow q_i-2\)

这样的变化一定不劣。

由此可以得到:一定存在最优集合 \(S\),满足 \(S\) 里所有区间的交集不为空

形式化地,有:\(\max_{[l_i,r_i]\in S}l_i\le \min_{[l_i,r_i]\in S}r_i\)

下面我们称 \(I=[\max_{[l_i,r_i]\in S},l_i,\min_{[l_i,r_i]\in S},r_i]\)


现在我们来考虑在多项式复杂度内解决本问题。

\(z_i=\sum_{[l_i,r_i]]\in S}[i\in [l_i,r_i]]\),也就是包含它的元素个数。

那么有 \(q_i=p_i+(|S|-z_i)-z_i=p_i-2z_i+|S|\)

设某个 \(t\in I\),则 \(z_t=|S|\)

考虑二分答案,设当前二分答案为 \(limit\),如果合法的充要条件是什么呢?

也就是 \(\exists S,t,\max q_i\le limit\)

注意到我们在计算过程中只关心 \(|S|\),也就是 \(z_t\),不妨枚举 \(t,z_t\),那么会有:\(\max (p_i-2z_i+z_t)\le limit\implies z_i\ge \lceil\frac{p_i+z_t-limit}{2}\rceil\)

考虑构造这样一个 \(S\),可以想到一个显然正确的贪心算法:依次扫描 \(i:1\to t\),并开一个优先队列,维护当前待使用的所有区间,按照 \(r\) 排序,当前发现 \(z_i\) 不足,那么就贪心地选大的 \(r\) 填上去。

最后再判断 \(t+1\to n\)\(z\) 是否符合即可。

复杂度 \(O(n^2m\log m\log V)\)


注意到复杂度主要开销是 \((t,z_t)\) 的枚举。

性质二

我们断言,如果最优解不是 \(S=\varnothing\),那么一定有 \(\exists t,S,\max_{i\in I}q_i\ge \max_{i}q_i-1,\max_{i}q_i\le limit\)

考虑如下当 \(\max_{i\in I} q_i<\max_iq_i-1\) 时对 \(S\) 的调整:

以下操作只要 \(S\) 不为空且条件不满足持续进行。

  1. \(I\in S\),直接删除 \(I\),那么有 \(\forall i\in I,q_i'\leftarrow q_i+1,\forall i\notin I,q'_i\leftarrow q_i-1\),导致两者差距缩小 \(2\)
  2. 否则考虑取到 \(I\) 的两个集合,也就是 \(r_{\min},l_{\max}\) 所在的两个区间 \(A,B\),将其删去,那么有 \(\forall i\in I,q_i'\leftarrow q_i+2\),其余 \(q_i\) 不变,也可以将差距缩小 \(2\)

可以发现操作始终可以进行,因此最终必然可以操作到满足条件,或者 \(S=\varnothing\)

注意到我们可以钦定 \(t\) 为取到 \(\max_{i\in I}q_i\)\(i\),因为 \(I\) 中的点对于 \(S\) 这个方案而言是等价的

由此,我们可以知道 \(\max_{i\in I}q_i=q_t\ge \max_{i}q_i-1\),而由性质零和构造方法,只要有解,那么我们就可以强化为构造出一个正好答案是 \(\max_iq_i=limit\) 的解,因此 \(limit\ge q_t=p_t-z_t\ge limit-1\),因此对于 \(t\),我们仅需枚举 \(p-limit(+1)\) 这两个即可。

复杂度降到 \(O(n^2\log m\log V)\)

性质三

我们断言,如果最优解 \(S\neq \varnothing\),那么一定是有某个最优的 \(S,t\),满足 \(p_t=\max p_i\)

注意到这个 \(t\) 同样取到了 \(\max_{i\in I}q_i\),因此有:

\(q_t=p_t-z_t\ge \max_iq_i-1\ge \max_i(p_i-2z_i+z_t)-1\ge \max(p_i-z_t+[i\notin I])-1\)

这推出 \(p_t\ge \max(p_i+[i\notin I])-1\implies p_t=\max p_i\)

性质四

更强于性质三的,我们给出,如果最优解不是 \(S=\varnothing\),那么存在最优解 \(S\),任意 \(\lbrace t|p_t=\max_{i}p_i\rbrace\subseteq I\)

设一个 \(x,p_x=\max p_i\),则 \(q_x=p_x+|S|-2z_x\le ans\le p_x-|S|+1\implies 2|S|-2z_x\le 1\)

由于左边是偶数且非负,所以只能取到 \(z_x=|S|\),因此 \(x\in I\)

综合各个性质,我们仅需 \(2\) 次贪心算法就可以 check 了。

\(O(n\log m\log V)\) 解决问题。

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

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

相关文章

20241428 《计算机基础与程序设计》课程总结

第一周作业总结 参考基于VirtualBox虚拟机安装Ubuntu图文教程安装Linux系统 自学计算机科学概论》并提出问题 第二周作业总结《计算机科学概论》:第一章向我们介绍了计算机科学这门学科的内容以及其基本概念,计算机科学是一门研究计算机及其周围各种现象和规律的科学,涵盖计…

国密证书的签名验签

数字证书结构①tbsCertificate域包含了主体名称和颁发者名称、主体的公钥、证书的有效期及其他相关信息。 ②signatureAlgorithm域包含了证书签发机构签发该证书所使用密码算法的标识符。该域的算法标识符必须与tbsCertificate中的signature标识的签名算法项相同。签名算法如为…

干货!带你了解7种检索增强生成 (RAG) 技术

回顾2023年RAG技术的发展,检索增强生成(Retrieval-Augmented Generation,RAG)技术彻底改变了人工智能模型的工作方式,它将生成式人工智能的优势与检索现实世界文档的精确性相结合。通过从外部来源提取相关数据,RAG使得人工智能能够生成更准确且上下文更合适的答案。随着这…

在浏览器中以按钮的方式执行Shell脚本

一、功能描述 有时候我们需要不定时的在服务器上执行某些脚本,当然我们可以使用电脑+XShell等工具登录到服务器运行脚本,如果使用手机就不方便操作了,那我们把脚本放在WEB页面中,只要手机可以正常访问到服务器,就可以使用浏览器打开页面,点击对应的按钮完成操作。 在网页…

基于ESP32的桌面小屏幕实战[5]:PCB下单

1. 焊接调试前准备 PCB下单 点击“PCB下单”检查一下DRC确认无错误之后,确认下单然后就会跳转到下面的网页基本上保持默认选项即可。可以看到“焊盘喷镀”有3个选项。在选择表面处理工艺时,应综合考虑产品的具体需求、环保法规以及成本等因素。例如,对于环保要求较高的消费电…

使用生成式人工智能进行软件测试1使用大型语言模型增强测试

1 使用大型语言模型增强测试 1.1 认识人工智能工具对测试和开发的影响 在过去,想要利用人工智能的个人必须具备开发、训练和部署人工智能模型的技能,或者有一个专家团队来完成这些任务,所有这些都会使在日常活动中使用人工智能成为一项昂贵而独特的工作。随着最近人工智能的…

20241319 《计算机基础与程序设计》课程总结

每周作业链接汇总第零周作业:链接,简要内容:自我介绍,课程预习与准备,建立个人技术博客,加入云班课.第一周作业:链接,简要内容:课程概论,工业革命与浪潮之巅,信息与信息安全,计算机系统概论,计算机安全,计算的限制,计算思维.第二周作业:链接,简要内容:数字化…

2024-2025-1 20241409《计算机基础与程序设计》第十五周学习总结

自我介绍很高兴加入2024计算机基础与程序设计 (北京电子科技学院 - 网络空间安全)的班级的大家庭。 第一周作业1.对《计算机基础与程序设计》进行了概述,有了基础的了解。 2.学习了有关2进制、8进制、10进制、16进制之间的转换。 第二周作业1.学习了《计算机科学概论》第一章,…

前端性能优化原理与实践笔记

知识体系与小册格局 写给读者 提起性能优化,大家现在脑海里第一时间会映射出什么内容呢? 可能是类似“雅虎军规”和《高性能 JavaScript》这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一篇又一篇以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的…

20241420 《计算机基础与程序设计》课程总结

20241420 《计算机基础与程序设计》课程总结 每周作业链接汇总 第0周作业:自我介绍与展望 https://www.cnblogs.com/vincent2077/p/18432491第一周作业:安装Linux系统并根据每章内容提出先导提问 https://www.cnblogs.com/vincent2077/p/18438668第二周作业:《计算机科学概论…

2024-2025-1 20241317 《计算机基础与程序设计》课程总结

学号20241317 《计算机基础与程序设计》课程总结 (按顺序)每周作业链接汇总 第0周作业:自我介绍第一周作业:AI学习第二周作业:c语言程序设计第一章第三周作业:c语言程序设计第二章第四周作业:c语言程序设计第三章第五周作业:c语言程序设计第四章第六周作业:c语言程序设…

Linux服务器无Root权限安装Cuda方法及问题解决

CUDA 简介 什么是 CUDA ? CUDA(Compute Unified Device Architecture)是由 NVIDIA 提供的一种并行计算平台和编程模型,用于加速计算密集型任务。CUDA 允许开发者使用 GPU 的计算能力,通过并行处理来快速执行复杂的计算任务。 CUDA 包括以下主要组成部分:CUDA Toolkit:为…