【PR #5 C】和平共处(整体二分)
和平共处
题目链接:PR #5 C
题目大意
有 n 个黑点 m 个白点,黑点一开始都在,白点按一定顺序加入。
问每次加入之后,你要选一些点删去(只是假设删去,并没有真正删去),使得不存在一个黑点在白点的左下方。
问你每次加入之后,最少要删多少个点。
思路
首先考虑白点都加入了要怎么搞,就是要删哪些,或者留那些。
那比如选了一个黑点,它右上方就不会有白点,那它右上方的黑点就可以全部保留。
那我们不难想象出最后的样子,一个阶梯状作为分解,而且是左上右下的那种。
上面包括阶梯线上的黑色+下面不包括阶梯的白色就是我们能保留的。
那一个显然的事情是随着白色点的加入,这个阶梯只会往右上移动。
那就是单调的,我们可以用整体二分来弄(一个分界线确定之后,它两边的点只会分别在 和 有是否贡献的不确定性)
那我们就继续考虑要怎么求一次的分界线。
考虑从左往右看,每个黑色的地方看是否要从当前的高度降到他这个高度。
那降不降就看那个缩小的区间中,黑白点的数量。
考虑黑白点进行一个匹配,黑色跟右上方的点匹配, 理解为作用抵消,然后没有匹配的话肯定是黑色多,折。
那如果两个都在先下面(注意上面是白色所以上面不能压线),那我们肯定优先不要在这里往下(因为我们是尽量不往下的)。
那如果黑色的在下面,白色的在上面,那我们就要黑色往下了,不然就不优了。
不过会发现匹配不可以随便匹配。
思考会发现应该从后往前贪心的匹配,黑点每次选还没有匹配的右边的第一个比它高的白点跟它匹配。
代码
__EOF__

本文作者:あおいSakura
本文链接:https://www.cnblogs.com/Sakura-TJH/p/PR_5_C.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Sakura-TJH/p/PR_5_C.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现