YbtOJ 二分算法课堂过关 例1 数列分段【二分】
发布日期:2021-05-07 13:09:44 浏览次数:21 分类:精选文章

本文共 724 字,大约阅读时间需要 2 分钟。

在这里插入图片描述


思路

乍一看,这道题不是原题吗???

直接二分一个最大值 O ( n ) O(n) O(n) 暴扫数组即可。
时间复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn).
注意:要判断 a [ i ] > x a[i]>x a[i]>x,直接输出 r e t u r n   0 return ~0 return 0

C o d e Code Code

#include
#include
#include
using namespace std;int n,m,js,ans=2147483647;int a[100010];bool check(int x){ int sum=0,row=1; for(int i=1; i<=n; i++) { if(a[i]>x) return 0; if(sum+a[i]<=x) sum+=a[i]; else sum=a[i],row++; } if(row<=m) return 1; else return 0;}int main(){ cin>>n>>m; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); js+=a[i]; } int l=1,r=js,mid=0; while(l<=r) { mid=(l+r)/2; if(check(mid)) r=mid-1,ans=min(ans,mid); else l=mid+1; } cout<
上一篇:YbtOJ 二分算法课堂过关 例3 最大均值【二分】【前缀和】
下一篇:YbtOJ 贪心算法课堂过关 例4 国王游戏【贪心】

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年03月21日 14时44分53秒