P1182 数列分段 Section II

2023-10-29

题目描述

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

关于最大值最小:

例如一数列 4 2 4 5 1 要分成 3 段。

将其如下分段:

[4 2][4 5][1]

第 1 段和为 6,第 2 段和为 9,第 3 段和为 1,和最大值为 9。

将其如下分段:

[4][2 4][5 1]

第 1 段和为 4,第 2 段和为 6,第 3 段和为 6,和最大值为 6。

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

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

输入格式

第 1 行包含两个正整数 N,M。

第 2 行包含 N 个空格隔开的非负整数 Ai​,含义如题目所述。

输出格式

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

输入输出样例

输入 #1

5 3
4 2 4 5 1

输出 #1

6

说明/提示

对于 20% 的数据,N≤10。

对于 40% 的数据,N≤1000。

对于 100% 的数据,1≤N≤10^5,M≤N,Ai​<10^8, 答案不超过 10^9。

思路

本题采用二分,贪心以及前缀和的思想,首先我们肯定得对答案进行二分处理,在判定中,我们

对数组求部分前缀和,记录所有不超过mid前缀和的个数如果大于等于m则说明取小了,否则取大了,最后在临近点找到答案

代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int n,m;
int a[N];
bool check(int x){
	int sum=0,num=0;
	for(int i=1;i<=n;i++){
		if(sum+a[i]<=x) sum+=a[i];//控制sum<=x;
		else sum=a[i],num++;//否则sum=a[i],开始新的前缀和,并且数目加一 
	}
	return num>=m;//判断符合要求的前缀和数目和m的关系 
}
int main(){
	cin>>n>>m;
	int l=0,r=0;//部分和最小肯定不小于元素中的最大值,而最大值不大于所有元素的总和,便确定了l和r 
	for(int i=1;i<=n;i++){
		cin>>a[i];
		l=max(l,a[i]);
		r+=a[i];
	}
	while(l<r){//二分答案 
		int mid=(l+r)/2;
		if(check(mid)) l=mid+1;
		else r=mid;
	}
	cout<<l; 
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P1182 数列分段 Section II 的相关文章

随机推荐

  • 构建安全的数据访问-配置管理(六)

    数据库连接字符串是针对数据访问代码主要考虑的配置管理问题 应认真考虑这些字符串的存储位置以及如何保护它们 特别是当它们包括凭据时 要提高加密管理安全性 使用 Windows 身份验证 确保连接字符串的安全 使用受限制的 ACL 确保 UDL
  • 【内网提权】windows2003本地PR提权详解

    提权利用的漏洞 Microsoft Windows RPCSS服务隔离本地权限提升漏洞 RPCSS服务没有正确地隔离 NetworkService 或 LocalService 帐号下运行的进程 本地攻击者可以利用令牌劫持的方式获得权限提升
  • 项目回顾:一个简单的充值码库存管理系统

    这里写目录标题 背景 需求 第一步 从商家获取充值码 第二步 需要能在平台上售卖充值码 第三步 后台管理系统 实现 防止重复售卖 重复发货 防止超售 邮件系统 性能 小结 背景 回顾一下去年 6 月左右做的一个库存管理系统 需求 我们是做一
  • 各种开源协议

    来源 玩转嵌入式 今天跟大家分享一些开源协议的知识 这些协议缩写词在各种代码 文档中随处可见 可又有多少人对这些知识细细研究过呢 作为一名专业的嵌入式系统开发人员这些东西都是一种素养 特别是当你自己要开源一些东西的时候该如何选择开源协议就变
  • 一个移植十分方便的malloc函数族的实现

    相信学习过c语言的人都知道malloc free函数 这里就不多说怎么用了 这里要说的是 提供它们的实现 该实现方法由uboot中malloc等函数的实现改编而来 已经过验证 没有问题 多说一句 该实现支持物理地址malloc free 不
  • Vue 使用 Markdown标记语言编辑器(MavonEditor)

    文章目录 1 实现效果 2 直接撸 MavonEditor 上代码 2 1 npm安装 MavonEditor 2 2 在需要使用Markdown的Vue组件导入mavonEditor 2 3 vue页面使用 3 参考 1 实现效果 本篇文
  • 7-10倍写入性能提升:剖析WiredTiger数据页无锁及压缩黑科技

    导语 计算机硬件在飞速发展 数据规模在急速膨胀 但是数据库仍然使用是十年以前的架构体系 WiredTiger 尝试打破这一切 充分利用多核与大内存时代来重新设计数据库引擎 达到 7 10 倍写入性能提升 本文由袁荣喜向 高可用架构 投稿 通
  • order by与索引

    ORDER BY 通常会有两种实现方法 一个是利用有序索引自动实现 也就是说利用有序索引的有序性就不再另做排序操作了 另一个是把结果选好之后再排序 用有序索引这种 当然是最快的 不过有一些限制条件 来看下面的测试 测试数据 student表
  • Matplotlib数据可视化

    e 安装及使用 安装 pip install i https mirrors aliyun com pypi simple matplotlib 使用 import Matplotlib pyplot as plt 操作需要numpy数据对
  • uni-app 布局固定头部,内容滚动

    1 代码
  • ios部分机型出现select、input等控件点击后失效不可再次点击dug

    问题描述 在昨天晚上的时候测试突然告诉我一个问题 在iphone 6s中select选择器在第一次点击后 其他的选择无法点击 整个手机都属于暂时性死机状态 问题分析 当时首先对代码进行了排查 排除是逻辑方面的问题 经过多方面验证发现只有6s
  • TensorFlow笔记:激活函数

    tf nn sigmid 函数 函数表达式 f x 1 1
  • h5+js+ajax+百度翻译API:实现翻译功能

    使用前端技术 h5 js ajax开发网页翻译功能 调用百度开放平台的API 入门级前端demo 非常详细好入手 功能为 点击Translate按钮 实现英译汉 页面如下 一 appID和key值准备 在百度开放平台https api fa
  • popState 监听浏览器切换路由

    浏览器内 popState 监听器使用 在前端开发过程中 在一些业务场景中可能会遇到监听浏览器前进 后退 控制路由等情况 我们可以使用Web API提供的popState事件来处理这些情况 提到popState 应用中 通常pushStat
  • python语法-def()详细介绍(特别全)

    1 什么是函数 在 Python 中 函数是一种可重用的代码块 用于执行特定的任务或操作 函数可以接受输入参数 并返回输出结果 从而实现模块化和封装性编程的目的 Python 中定义函数的语法如下 def function name par
  • 网络安全比赛A模块任务书

    前言 这是作者这几个月来的第一次更新文章 问就是太忙了 最近要去参加国赛 在此重新回来写文章 也不知道能写多久 就当练习了 一 A模块基础设施设置 安全加固 A 1 登录加固 1 密码策略 a 最小密码长度不少于8个字符 将密码长度最小值的
  • data1

    两数之和 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 你不能重复利用这个数组中同样的元素 给定 nums 2 7 11
  • vue3+ts预览和下载word,pdf,excel

    文章目录 前言 一 vue office相比其他库的优势 二 使用步骤 1 引入库 2 组件封装 3 组件使用 总结 前言 最近项目一直在做一些文档方面的相关操作 例如查看文件 做文件导出 一般的导出格式为word excel pdf 等
  • STM32 实战中的一些技术问题解决

    开发板高速USB接口延迟问题 首先是检查硬件接口布线和插槽整体有无损坏 第二是发送数据包进行测试 判断是哪种数据类型和字段会发生时延 然后对症解决问题 以上两种方式能够解决80 的延迟问题 当然 也有比较少见的疑难杂症 发现当 USB 线拔
  • P1182 数列分段 Section II

    题目描述 对于给定的一个长度为N的正整数数列 A 现要将其分成 M M N 段 并要求每段连续 且每段和的最大值最小 关于最大值最小 例如一数列 4 2 4 5 1 要分成 3 段 将其如下分段 4 2 4 5 1 第 1 段和为 6 第