【luogu CF1630B】Range and Partition(结论)
Range and Partition
题目链接:luogu CF1630B
题目大意
给你一个长度为 n 的数组 a,值域是 1~n,和一个数 k,你要选一个值域范围 [x,y],使得数组可以划分成 k 段,每一段 [x,y] 范围内的数比范围外的数都多。
要你求一组 [x,y] 使得 y-x 最小且给出划分方案。
思路
考虑如果给你范围,怎么看最多能划分成多少段。
(段之间可以合并这个很显然)
那我们考虑从左往右看,如果当前段能满足条件就直接结成一个段。
思考这样是否可行,那我们可以首先算出在值域范围比不在至于范围多的数量。
那这个相当于我们的资本,那我们每次肯定是少用点,那剩下的随便啊,就留给最后一个呗。
也不难看到这个多的数量就是能形成的段的最大数量。
然后因为我们的范围是值域的范围,那如果我们固定左端点,右端点越大,这个差肯定越大,考虑找到第一个满足条件的右端点。
而且左端点往右,右端点肯定不会往左,所以右端点是单调的,那一个指针维护即可。
至于求划分方案,就用我们上面的想法,最后一段直接包揽剩下全部即可。
代码
__EOF__

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