10014. 「一本通 1.2 练习 1」数列分段 II

题目描述

对于给定的一个长度为 n 的正整数数列 A ,现要将其分成 m 段,并要求每段连续,且每段和的最大值最小。

例如,将数列 4,2,4,5,1 要分成 3 段:

若分为 [4,2][4,5][1]  ,各段的和分别为 6,9,1 ,和的最大值为9 ;

若分为 [4][2,4][5,1]  ,各段的和分别为 4,6,6 ,和的最大值为 6;

并且无论如何分段,最大值不会小于6 。

所以可以得到要将数列 4  2 4 5 1 要分成 3 段,每段和的最大值最小为 6 。

输入格式

第  行包含两个正整数 n,m;

第  行包含 n 个空格隔开的非负整数 A_i,含义如题目所述。

输出格式

仅包含一个正整数,即每段和最大值最小为多少。

样例
输入复制
5 3
4 2 4 5 1
输出复制
6
 
数据范围与提示

对于100% 的数据,有 n<=1e5,m<=n,A_i  之和不超过 1e9 。

 
二分答案
________________________________
 

 1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn=1e5+10;
5 ll sz[maxn];
6 ll n,m;
7 ll l,r,ans;
8 bool pd(ll x)
9 {
10 ll sm=0,js=1;
11 for(int i=1;i<=n;++i)
12 {
13 if(sm+sz[i]>x)
14 {
15 js++;
16 sm=0;
17 }
18 sm+=sz[i];
19 }
20 return js<=m;
21 }
22 int main()
23 {
24 scanf("%lld%lld",&n,&m);
25 for(int i=1;i<=n;++i)
26 {
27 scanf("%lld",sz+i);
28 r+=sz[i];l=max(l,sz[i]);
29 }
30
31 while(l<=r)
32 {
33 ll mid=(l+r)>>1;
34 if(pd(mid))ans=mid,r=mid-1;
35 else l=mid+1;
36 }
37 cout<<ans;
38 return 0;
39 }
 
 
 

loj10014数列分段二的更多相关文章

  1. CCF真题之数列分段

    201509-1  数列分段 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a ...

  2. FZYZOJ-1578 [NOIP福建夏令营]数列分段

    P1578 -- [NOIP福建夏令营]数列分段 时间限制:1000MS      内存限制:131072KB 状态:Accepted      标签:    二分   无   无 Descripti ...

  3. CCF系列之数列分段(201509-1)

    试题名称: 数列分段 试题编号: 201509-1 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 ...

  4. CCF CSP 201509-1 数列分段

    题目链接:http://118.190.20.162/view.page?gpid=T32 问题描述 试题编号: 201509-1 试题名称: 数列分段 时间限制: 1.0s 内存限制: 256.0M ...

  5. P1182 数列分段Section II

    P1182 数列分段Section II 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 ...

  6. 洛谷 P1181,1182 数列分段Section

    数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ...

  7. 洛谷 P1182 数列分段 Section II

    洛谷 P1182 数列分段 Section II 洛谷传送门 题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. ...

  8. 1436:数列分段II

    1436:数列分段II 题解 二分答案 我们最终答案的取值区间是[  max(a[i])  ,   ∑a[i]  ] 设定 l=max(a[i]) , r=∑a[i]  , mid不断二分 mid表示 ...

  9. luogu P1181 数列分段Section I x

    P1181 数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出 ...

随机推荐

  1. 程序员你是如何使用镜像中心Harbor的?

    背景 harbor即docker的私服:管理公司内部输出的镜像制品: 是VMware公司中国团队为企业用户设计的镜像注册服务器,用途:存储和分发docker镜像: 在官方的docker registr ...

  2. [leetcode]79.Search Word 回溯法

    /** * Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...

  3. 学习 Gin 总结(2020.12.30-31)

    2020.12.30 问题总结 中间件 context.Next() 源码注释: // Next should be used only inside middleware. // It execut ...

  4. 实现连续登录X天送红包这个连续登录X天算法

    实现用户只允许登录系统1次(1天无论登录N次算一次) //timeStamp%864000计算结果为当前时间在一天当中过了多少秒 //当天0点时间戳 long time=timeStamp-timeS ...

  5. 如何解决 ajax跨域被阻止 CORS 头缺少 'Access-Control-Allow-Origin'的问题?

    已拦截跨源请求:同源策略禁止读取位于 http://192.168.1.72:8080/securityMonitor_TV/service/getTest 的远程资源. (原因:CORS 头缺少 ' ...

  6. psql: could not connect to server: No such file or directory

    postgresql报错: psql: could not connect to server: No such file or directory         Is the server run ...

  7. 每日一个linux命令4

    mkdir命令 linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. mkdir test    创建一个空目录 ...

  8. SpringMVC的@Validated校验注解使用方法

    validate会对参数进行校验,校验标准为validate后的类中的标准.本例中对User进行校验,User类中设置了校验标准. 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参 ...

  9. Logstash学习之路(二)Elasticsearch导入json数据文件

    一.数据从文件导入elasticsearch 1.数据准备: 1.数据文件:test.json 2.索引名称:index 3.数据类型:doc 4.批量操作API:bulk {"index& ...

  10. 买卖股票的最佳时机 III

    给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的 ...