冯泽来 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成3 块
今天他得到了一个数组,他突然也想把它分块,他想知道,把这个数组分成3 块,块可以为空。假设3 块各
自的和中的最大值最小
请输出分完之后3 块中的最大值
输入
输入第一行包含一个整数n 代表数组大小
接下来n 个整数a1, a2, ..., an,代表数组
对于40% 的数据,1≤n≤10
对于70% 的数据,1≤n≤10的3次方
对于100% 的数据,1≤n≤105, 1≤ai≤10的7次方

样例输入1

10

2 5 1 4 7 3 6 2 5 1

样例输出1

14

先用sum[i]统计1到i的和,最后处理的时候用sum[i]-sun[j-1]就可以得到j到i区间的和了。

然后枚举i点,在后面的区间中用二分求出另一个分界点

代码:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
long long sum[100005],a[100005];
long long ans=111111111111LL;
long long max(long long a,long long b,long long c)
{
  if(a>b&&a>c)return a;
  if(b>a&b>c)return b;
  return c;
}
int main()
{
  freopen("divide.in","r",stdin);
  freopen("divide.out","w",stdout);
  ios::sync_with_stdio(false);
  int n;cin>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
    sum[i]=sum[i-1]+a[i];
  }
  for(int i=1;i<=n;i++)
  {
    int left=i+1,right=n+1;
    while(left<right-1)
    {
      int mid=left+right>>1;
      if(sum[mid-1]-sum[i-1]<=sum[n]-sum[mid-1])
      left=mid;
      else right=mid;
    }
    long long ans1=sum[left-1]-sum[i-1];
    long long ans2=sum[n]-sum[left-1];
    ans=min(ans,max(sum[i-1],ans1,ans2));
    ans1=sum[left]-sum[i-1];
    ans2=sum[n]-sum[left];
    ans=min(ans,max(sum[i-1],max(ans1,ans2)));
  }
  cout<<ans;
  return 0;
}

转载于:https://www.cnblogs.com/937337156Zhang/p/5671541.html

冯泽来学分块(二分查找)相关推荐

  1. xtragrid 某个值 查找_二分查找(下):如何快速定位IP对应的省份地址?

    通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地. 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现 ...

  2. *【CodeForces - 122C 】Lucky Sum (bfs记录状态,二分查找,有坑)(或分块)

    题干: Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decima ...

  3. 对长度为200的有序表进行二分查找_程序员常用的查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  4. 查找:顺序查找、二分查找、分块查找

    一.顺序查找 按索引顺序查找,可用于查找无序序列 int SequenceSearch(vector<int> seq, int key) {const int c_len = seq.s ...

  5. 二分查找 二分答案 万字详解,超多例题,带你学透二分。

    很多人对二分感到很苦恼,很困惑,可能是因为二分的边界很难掌握,也许是判断条件难写- 然而,很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你学透二分!!! 二分可以简单分为二分查找与二分答案. 可能 ...

  6. 第三次学JAVA再学不好就吃翔(part59)--冒泡排序选择排序以及二分查找

    学习笔记,仅供参考 文章目录 数组高级冒泡排序 数组高级选择排序 二分查找法 数组高级冒泡排序 冒泡排序原理:设数组中有n个元素,从第一个元素开始,对相邻元素进行两两比较,两个元素中大的往后放,第一次 ...

  7. 小饶学编程之JAVA SE第一部分——二分查找法

    二分查找法 一.算法描述 二.算法原理 三.算法实现 四.总结 一.算法描述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结 ...

  8. python折半查找算法_跟黄哥学python序列文章之python二分查找算法

    在计算机科学中,二分查找算法(binary search).也称折半搜索(英语:half-interval search), 二分搜索法.二分搜索.二分探索,是一种在有序数组中查找某一特定元素的搜索算 ...

  9. c语言通讯录二分查找,C语言程序设计 通讯录程序.doc

    <C语言程序设计 通讯录程序.doc>由会员分享,可在线阅读,更多相关<C语言程序设计 通讯录程序.doc(28页珍藏版)>请在人人文库网上搜索. 1.目录:课 程 设 计 任 ...

最新文章

  1. 程序员该怎么做,才能成为coding王者?
  2. 文件bookDetails.html,查看源码: BookShopping.rar_bookdetails.jsp - VerySource
  3. linux python matplotlib 使用,关于Linux:如何在Python的matplotlib中设置“后端”?
  4. java.lang.ClassCastException
  5. CYPRESS USB芯片win10驱动
  6. 在mysql中更改数据类型_如何在MySQL中更改列的数据类型?
  7. bugku—— 代码审计 做题记录
  8. 嵌入式web服务器预研报告(转)
  9. Python基础项目实践之:面向对象方法实现模拟银行管理系统
  10. 【HTML】一个好看的登录界面
  11. 学习l1图做图像分析
  12. 告知书页面html样式,后院通知编辑页面.html
  13. 自动驾驶 5-1 比例积分微分 (PID) 控制Lesson 1: Proportional-Integral-Derivative (PID) Control
  14. 基于支持向量机的新闻分类
  15. 最新解决方法This template did not produce a Java class or an interface
  16. 用心去爱那些爱过我们的人
  17. spss软件简介与数据操作
  18. 洛谷P1336 课题选择
  19. logo设计的忌讳与要点有哪些
  20. window系统node彻底卸载

热门文章

  1. ctfshow-WEB-web6
  2. java arraylist 构造_深入理解java集合框架之---------Arraylist集合 -----构造函数
  3. 【带着canvas去流浪(6)】绘制雷达图
  4. MySQL 5.7安装
  5. MySQL索引,MySQL中索引的限制?
  6. MySQL tips (日期时间操作/concat 等)
  7. 基本数据结构之Sort
  8. visualize python_安利一个Python大数据分析神器!
  9. Python的安装(源码编译安装,IDE安装)
  10. 产品经理是怎么产生的?