LGTB 学分块
2024-08-28 06:26:21
- 总时间限制:
- 10000ms
- 单个测试点时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
LGTB 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成 3 块
今天他得到了一个数组,他突然也想把它分块,他想知道,把这个数组分成 3 块,块可以为空。假设 3 块各自的和中的最大值最小
请输出分完之后 3 块中的最大值
- 输入
- 输入第一行包含一个整数 n 代表数组大小
接下来 n 个整数 a1 , a2 , ..., a n ,代表数组 - 输出
- 输出包含 1 个整数,代表分块完成后 3 块中的最大值
- 样例输入
-
10
2 5 1 4 7 3 6 2 5 1 - 样例输出
-
14
- 提示
- 对于 40% 的数据,1 ≤ n ≤ 10
对于 70% 的数据,1 ≤ n ≤ 1e3
对于 100% 的数据,1 ≤ n ≤ 1e5 , 1 ≤ ai ≤ 1e7
先枚举两个区间,然后对其中较大的一个区间进行二分,二分后进行两次比较
#define LL long long #include<iostream>
#include<cstdio>
using namespace std; const LL INF=0x7fffffffffffffff; int n;
int a;
LL ans=INF;
LL f[]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) {scanf("%d",&a);f[i]=f[i-]+a;}
if(n==) {cout<<f[];return ;}
if(n==) {cout<<max(f[],f[]);return ;}
for(int i=;i<n;i++)
{
int left=i+,right=n;
while(left+<right)
{
int mid=(left+right)>>;
if(f[mid]-f[i]>f[n]-f[mid]) right=mid;
else left=mid;
}
ans=min(ans,max(max(f[i],f[left]-f[i]),f[n]-f[left]));
ans=min(ans,max(max(f[i],f[left+]-f[i]),f[n]-f[left+]));
}
cout<<ans<<endl;
return ;
}
最新文章
- django 进阶篇
- android studio/Intellij idea之proguard实践
- secureCRT背景颜色设置
- mybatis 返回null 及 参数说明
- 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
- iOS - UISplitViewController
- ASP.NET的SEO:正则表达式
- 教你50招提升ASP.NET性能(十七):不要认为问题只会从业务层产生
- JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译)
- 利用qq设置个性化的域名邮箱
- Emit方式调用方法
- Android之RxJava详解
- redis 主从配置,主从切换
- 转 Pycharm及python安装详细教程
- 上海仪电Azure Stack技术深入浅出系列2:Azure Stack与Azure的有QoS保证的网络联通实现方法和对比测试
- Kali Linux来袭~老司机带你进击
- Selenium+Chrome+PhantomJS爬取淘宝美食
- Makefile 11——支持头文件目录指定
- PHP学习8——图像处理
- [2018 ACL Short and System] 对话系统
热门文章
- React学习记录
- ffmpeg文件生成m3u8文件及ts切片程序(一)
- eclipse导入maven项目有时出现web.xml is missing的问题
- Unity 关于激活
- 一次Zookeeper 扩展之殇
- HDU 2586——How far away ?——————【LCA模板题】
- <;Win7硬件故障分析>;
- Teradata 认证系列 - 2. Teradata数据库总览
- How to Install Apache Solr 4.5 on CentOS 6.4
- bootstrapValidator 如何重新启用提交按钮