冯泽来学分块(二分查找)
冯泽来 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成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
冯泽来学分块(二分查找)相关推荐
- xtragrid 某个值 查找_二分查找(下):如何快速定位IP对应的省份地址?
通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地. 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现 ...
- *【CodeForces - 122C 】Lucky Sum (bfs记录状态,二分查找,有坑)(或分块)
题干: Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decima ...
- 对长度为200的有序表进行二分查找_程序员常用的查找算法(顺序、二分、插值、分块、斐波那契)...
顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...
- 查找:顺序查找、二分查找、分块查找
一.顺序查找 按索引顺序查找,可用于查找无序序列 int SequenceSearch(vector<int> seq, int key) {const int c_len = seq.s ...
- 二分查找 二分答案 万字详解,超多例题,带你学透二分。
很多人对二分感到很苦恼,很困惑,可能是因为二分的边界很难掌握,也许是判断条件难写- 然而,很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你学透二分!!! 二分可以简单分为二分查找与二分答案. 可能 ...
- 第三次学JAVA再学不好就吃翔(part59)--冒泡排序选择排序以及二分查找
学习笔记,仅供参考 文章目录 数组高级冒泡排序 数组高级选择排序 二分查找法 数组高级冒泡排序 冒泡排序原理:设数组中有n个元素,从第一个元素开始,对相邻元素进行两两比较,两个元素中大的往后放,第一次 ...
- 小饶学编程之JAVA SE第一部分——二分查找法
二分查找法 一.算法描述 二.算法原理 三.算法实现 四.总结 一.算法描述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结 ...
- python折半查找算法_跟黄哥学python序列文章之python二分查找算法
在计算机科学中,二分查找算法(binary search).也称折半搜索(英语:half-interval search), 二分搜索法.二分搜索.二分探索,是一种在有序数组中查找某一特定元素的搜索算 ...
- c语言通讯录二分查找,C语言程序设计 通讯录程序.doc
<C语言程序设计 通讯录程序.doc>由会员分享,可在线阅读,更多相关<C语言程序设计 通讯录程序.doc(28页珍藏版)>请在人人文库网上搜索. 1.目录:课 程 设 计 任 ...
最新文章
- 程序员该怎么做,才能成为coding王者?
- 文件bookDetails.html,查看源码: BookShopping.rar_bookdetails.jsp - VerySource
- linux python matplotlib 使用,关于Linux:如何在Python的matplotlib中设置“后端”?
- java.lang.ClassCastException
- CYPRESS USB芯片win10驱动
- 在mysql中更改数据类型_如何在MySQL中更改列的数据类型?
- bugku—— 代码审计 做题记录
- 嵌入式web服务器预研报告(转)
- Python基础项目实践之:面向对象方法实现模拟银行管理系统
- 【HTML】一个好看的登录界面
- 学习l1图做图像分析
- 告知书页面html样式,后院通知编辑页面.html
- 自动驾驶 5-1 比例积分微分 (PID) 控制Lesson 1: Proportional-Integral-Derivative (PID) Control
- 基于支持向量机的新闻分类
- 最新解决方法This template did not produce a Java class or an interface
- 用心去爱那些爱过我们的人
- spss软件简介与数据操作
- 洛谷P1336 课题选择
- logo设计的忌讳与要点有哪些
- window系统node彻底卸载