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

wqs二分的无脑写法

我曾经被 wqs 二分的边界折磨死了。后面听说有种很无脑的写法,听说是 lhx 大神发明的,记录一下。

假设我们要求的是恰好 \(k\) 个的最大值,大概是这样的:

int l = -1e6, r = 1e6;
while (l + 1 < r) {int mid = l + r >> 1;if (check(mid).se >= k) l = mid;else r = mid;
}
return min(check(l).fi + l * k, check(r).fi + r * k);

这个东西很巧妙的地方在于,你不再需要在 check() 里再关心同样结果下是多取还是少取。而且不用再关心 l 是取 mid 还是 mid + 1 的问题了。

好,问题来了,为什么这个是对的?而且这个求的是最大值啊,为什么取 min 是对的?

我们画个图。

假设答案在 Ans 点,我们二分到了 l 在 L,r 在 R,此时我们用 L 算出来的 Ans' 是飞出了答案的凸函数的,而用 R 算出来的是答案。我们发现算出来只可能更大,而且因为是整数所以一定有一个是答案。于是我们取个 min 就好啦。

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

相关文章:

  • 2022 ICPC Hangzhou G and 2022 ICPC Jinan
  • C++在类定义内的函数包含static代表什么含义呢?
  • 2025/10/20~2025/?/? 做题笔记 - sb
  • 10-20 Extra-Problem 总结
  • Rust 编译加速的最佳实践
  • 20232304 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 10月20日记
  • 笔记本 光驱 的内部结构及用法: 应急强大的系统启动 (恢复) 光盘 (DVD+R/RW)
  • 20251020周一日记
  • WPF loading data asynchronously and contextmenu save as json in mvvm
  • Android 源码解析系列1- Android init 进程启动流程
  • 英语_阅读_Start school_待读
  • 2025.10.20总结
  • 10.20总结
  • 学习相关
  • 题解:Luogu P2075 区间 LIS
  • 英语_阅读_2050 Space tourism_待读
  • goframe框架命令行工具gf在zsh下不能用
  • 题解:Luogu P10644 [NordicOI 2022] 能源网格 Power Grid
  • 题解:Luogu P10004 [集训队互测 2023] Permutation Counting 2
  • 题解:Luogu P4143 采集矿石
  • 从18w到1600w播放量,我的一点思考。
  • 扣一个细节问题
  • 10.20java作业
  • 题解:Luogu P14175 【MX-X23-T5】向死存魏
  • 软工第三次作业————结对作业
  • Spring 常见注解
  • 题解:AtCoder ARC208C Mod of XOR
  • 题解:Luogu P6898 [ICPC 2014 WF] Metal Processing Plant
  • 32-腾讯IM接入资料和定价