当前位置: 首页 > news >正文

【题解】P3641 [APIO2016] 最大差分

第一问是简单的,直接从两端往中间问即可。

对于第二问,先求出序列的最小值 \(mi\) 和最大值 \(mx\),此时根据抽屉原理可知答案有下界 \(\frac{mx-mi}{n-1}\)

这个时候考虑给 \([mi,mx]\) 这个区间每 \(\frac{mx-mi}{n-1}\) 个元素分块,根据抽屉原理可知最后 gap 最大的位置 \(a_{i+1}-a_i\) 一定不会让 \(a_i\)\(a_{i+1}\) 出现在同一个块内。因此直接对每个块询问一次最小值和最大值,然后若该段区间内有元素,就把答案和上一次询问出的最大值做个差并更新答案即可。最后记得处理 \(mx\) 和最后一次问出的最大值的差。

然后考虑证明正确性:

  • 询问 \(mi,mx\) 直接对区间 \([0,10^{18}]\) 问即可,花费为 \(n+1\)
  • 然后对每一个块都询问一次,总共会问 \(n-1\) 次,总共出现 \(n-2\) 个点,因此该部分总花费为 \((n-1)+(n-2)=2n-3\)

总花费为 \((n+1)+(2n-3)=3n-2\le 3n\),符合题目要求,可以通过该题。

http://www.jsqmd.com/news/326973/

相关文章:

  • 【题解】P5955 [POI 2018] Pionek
  • 五个值得关注的Python新库
  • 中医执医机构选择:我们应该选哪个课程好?
  • 【题解】P14303 [GCJ 2011 Finals] Runs 加强版
  • 【题解】SP3912 MTREECOL - Color a tree
  • 【题解】P10832 [COTS 2023] 传 Mapa
  • Agent设计模式学习(基于langchain4j实现)(9) - 人机协同
  • C++与Java性能对比
  • 为什么Python依然是初学者最好的选择?
  • 更优雅的测试:Pytest框架入门
  • 【kali显示界面太小?一步教你解决】
  • Python深度学习入门:TensorFlow 2.0/Keras实战
  • 【题解】CF946E Largest Beautiful Number
  • 自定义内存布局控制
  • 嵌入式LinuxC++开发
  • 【题解】P14224 [ICPC 2024 Kunming I] 子数组
  • 自定义操作符重载指南
  • Python游戏中的碰撞检测实现
  • 图标提取神器!一键提取软件安装包中的图标
  • 图片画质增强神器!模糊照片秒变高清
  • 代码质量卫士:使用Pylint和Flake8
  • C++中的策略模式变体
  • Python Web爬虫入门:使用Requests和BeautifulSoup
  • 工具、测试与部署
  • 自动化你的日常工作:一个Python脚本的诞生
  • 构建一个桌面版的天气预报应用
  • 【题解】P7315 [COCI 2018/2019 #3] Sajam
  • 使用Kivy开发跨平台的移动应用
  • 分布式系统C++实现
  • Pcdmis海克斯康三坐标脱机软件2013至2021 CAD++全功能 远程包安装