
二分(洛谷-P1182)
发布日期:2021-05-16 17:24:47
浏览次数:16
分类:精选文章
本文共 882 字,大约阅读时间需要 2 分钟。
#include#include #include using namespace std;int a[100005];int n, m;int high, low = 0;bool check(int flag) { int sum = 0; int cnt = 1; // 第一段 for (int i = 1; i <= n; i++) { sum += a[i]; if (sum > flag) { cnt++; sum = a[i]; // 每一段的开头 } } return cnt > m;}int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; low = max(low, a[i]); high += a[i]; } while (low < high) { int mid = (low + high) / 2; if (check(mid)) { low = mid + 1; } else { high = mid; } } // 该代码正确运行时,low即为最小长度 cout << low << endl;}
以上代码实现了一个基于二分查找的算法,用于寻找数组中最小和的子数组长度。该算法通过递减查找区间,快速缩小搜索范围,最终返回所需最小长度。这段代码通过将整个数组和范围记录在low和high变量中,并利用check函数判断当前区间中的最小和的子数组长度是否超过给定值m,从而进行二分查找操作。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月21日 12时34分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Flask--简介
2019-03-11
Frame--Api框架
2019-03-11
Boostrap技能点整理之【网格系统】
2019-03-11
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2019-03-11
Git简单理解与使用
2019-03-11
echarts 基本图表开发小结
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
JDK9-15新特性
2019-03-11
TreeSet、TreeMap
2019-03-11
JVM内存模型
2019-03-11
可变长度参数
2019-03-11
3、条件查询
2019-03-11
cordova打包apk更改图标
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
文件系统的层次结构
2019-03-11
vue(渐进式前端框架)
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
Linux操作系统的安装与使用
2019-03-12