51nod-1065:最小正子段和(STL)
Input第1行:整数序列的长度N(2 <= N <= 50000)
第2 - N+1行:N个整数Output输出最小正子段和。Sample Input
8
4
-1
5
-2
-1
2
6
-2
Sample Output
1
思路:对于每个前缀和,找到左边的u最大的小于sum[i]的数,两种写法:
第一种手动维护有序数列。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=;
ll a[maxn];
vector<ll>v;
int main()
{
ll N,i,j,ans=-;
scanf("%lld",&N);
v.push_back();
for(i=;i<=N;i++){
scanf("%lld",&a[i]);
a[i]+=a[i-];
int pos=lower_bound(v.begin(),v.end(),a[i])-v.begin();
if(pos->=&&(ans==-||ans>a[i]-v[pos-])) ans=a[i]-v[pos-];
pos=upper_bound(v.begin(),v.end(),a[i])-v.begin();
v.insert(v.begin()+pos,a[i]);
}
printf("%lld\n",ans);
return ;
}
第二种用lower_bound+set
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll inf=1e18;
const int maxn=;
ll a[maxn];
set<ll>s;
int main()
{
ll N,i,j,ans=inf;
scanf("%lld",&N);
for(i=;i<=N;i++){
scanf("%lld",&a[i]);
a[i]+=a[i-];
}
s.insert(a[N]);
for(i=N-;i>=;i--){
ll t=*s.lower_bound(a[i]+);
if(t-a[i]>) ans=min(ans,t-a[i]);
s.insert(a[i]);
}
printf("%lld\n",ans);
return ;
}
51nod-1065:最小正子段和(STL)的更多相关文章
- 51nod 1065 最小正子段和
题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...
- 51nod 1065 最小正子段和 (贪心)
题目:传送门. 题意:中文题. 题解:求前缀和,并且标记每个数的下标,按照前缀和大小进行从小到大排序.随后进行遍历,如果满足下标data[i-1].id<data[i].id&& ...
- 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
题目: 这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的. 我的解法是:用sum[i]存前i项的和,也就是前缀和. 这题就变成了求sum[j]-sum[i]的大于0的最小值( ...
- 51nod 1065:最小正子段和
1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...
- AC日记——最小正子段和 51nod 1065
最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...
- 51nod-1065 最小正子段和 【贪心 + 思维】
N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一个子序列(a[i],a[i+1],-a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如 ...
- 【zznu-2060】 Minsum Plus(最小正子段和)
题目描述 题意简单到令人发指! 序列A由N个整数组成,从中选出一个连续的子序列,使得这个子序列的和为正数,且和为所有和大于零的子序列中的最小值. 将这个值输出,若无解,输出no solution. 输 ...
- [51nod1065]最小正子段和
题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...
- [51NOD1065] 最小正子段和(STL,前缀和)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1065 估计没人这么做吧-用一个set维护前缀和,但是set的l ...
随机推荐
- Android---简单的动画
- Rebuild account Windows 10 in Domain
cmd ‘administrator’Regedit 1. Check User Profiles HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\C ...
- 重新认识一遍JavaScript - 2
1.JavaScript没有Java和C中的int.double,怎么识别这些类型的呢?或者说不支持 问:你认为呢? 答:var 支持所有数据类型(int.double.string),取决于你输入的 ...
- persits.jpeg 水印组件
官方下载的persits.jpeg 都须要注冊.不然就有时间限制.可今天须要个persits.jpeg 破解版安装到server上,可百度了半天也没找到.最后还是找到了. 很捧的水印组件,玩serve ...
- sparkSQL1.1入门之十:总结
回想一下,在前面几章中,就sparkSQL1.1.0基本概念.执行架构.基本操作和有用工具做了基本介绍. 基本概念: SchemaRDD Rule Tree LogicPlan Parser Anal ...
- bat+sqlcmd 批量执行脚本
Hello,此BAT脚本能够帮助开发者将某目录下全部SQL脚本按文件名称依次在指定数据库中批量执行. 不用忍受powershell invoke-sqlcmd 的笨重.在指执行时多一种选择. bat文 ...
- IntelliJ IDEA配置Tomcat及部署项目
IntelliJ IDEA配置Tomcat及部署项目(原链接) 主要有以下几个要点 1.选择本地的tomcat容器. 2.可以选择修改访问路径. 3.On Update action 当我们按 Ctr ...
- MapReduce 1工作原理图文详解
MapReduce工作原理图文详解 一 MapReduce程序执行流程 程序执行流程图如下: 流程分析:1.在客户端启动一个作业.2.向JobTracker请求一个Job ID.3.将运行作业所需要的 ...
- disabled和readonly
项目中,有一个input控件,input的值需要通过点击一个javascript链接,从弹出的对话框中所列出的项中选择.而不能从input框中直接输入. 刚开始将input的disabled属性设置为 ...
- 在zend framework框架中try{}catch(Exception e){}的跳转问题
请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 首先我先说明我遇到的问题 try{ //导入学生信息 $ModelStudent->insert($dat ...