总时间限制: 
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 ;
}

最新文章

  1. django 进阶篇
  2. android studio/Intellij idea之proguard实践
  3. secureCRT背景颜色设置
  4. mybatis 返回null 及 参数说明
  5. 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
  6. iOS - UISplitViewController
  7. ASP.NET的SEO:正则表达式
  8. 教你50招提升ASP.NET性能(十七):不要认为问题只会从业务层产生
  9. JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译)
  10. 利用qq设置个性化的域名邮箱
  11. Emit方式调用方法
  12. Android之RxJava详解
  13. redis 主从配置,主从切换
  14. 转 Pycharm及python安装详细教程
  15. 上海仪电Azure Stack技术深入浅出系列2:Azure Stack与Azure的有QoS保证的网络联通实现方法和对比测试
  16. Kali Linux来袭~老司机带你进击
  17. Selenium+Chrome+PhantomJS爬取淘宝美食
  18. Makefile 11——支持头文件目录指定
  19. PHP学习8——图像处理
  20. [2018 ACL Short and System] 对话系统

热门文章

  1. React学习记录
  2. ffmpeg文件生成m3u8文件及ts切片程序(一)
  3. eclipse导入maven项目有时出现web.xml is missing的问题
  4. Unity 关于激活
  5. 一次Zookeeper 扩展之殇
  6. HDU 2586——How far away ?——————【LCA模板题】
  7. &lt;Win7硬件故障分析&gt;
  8. Teradata 认证系列 - 2. Teradata数据库总览
  9. How to Install Apache Solr 4.5 on CentOS 6.4
  10. bootstrapValidator 如何重新启用提交按钮