51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
题目:
这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的。
我的解法是:用sum[i]存前i项的和,也就是前缀和。
这题就变成了求sum[j]-sum[i]的大于0的最小值( j > i )。
我们可以看到直接循环运算量是50000*50000,会超时。
所以我们应该充分利用前缀和的特性。
我们用一个set容器来装sum。
当算到i项时,保证前i-1项已经装入了set中。
我们用二分查找找到第一个比sum[i]小的值,用sum[i]减去这个值来更新答案。
至于二分插入,set容器中插入数据用的就是二分插入。
代码:
#include <bits\stdc++.h> using namespace std; typedef long long ll; ll sum[50010]; // sum[i]表示 1~(i-1) 项的和 set <ll> s; // 到第i项时,s存的是 sum[1]~sum[i-1] set <ll>::iterator it; //迭代器 int main() {int n;cin >> n;int mn = 2000000000;int key;for(int i = 1;i <= n; i++){cin >> key;sum[i] = sum[i-1]+key;}s.insert(0);for(int i = 1;i <= n; i++){// lower_bound返回大于等于sum[i]的最小值// upper_bound返回大于sum[i]的最小值 it = s.lower_bound(sum[i]);if(it != s.begin()){ it--;//it表示小于sum[i]的最大值 if(sum - *it > 0){mn = min((ll)mn,sum[i]-*it);}} s.insert(sum[i]);}cout << mn << endl;return 0; }
转载于:https://www.cnblogs.com/zhangjiuding/p/7628119.html
51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找相关推荐
- 51nod 1065 最小正子段和 (贪心)
题目:传送门. 题意:中文题. 题解:求前缀和,并且标记每个数的下标,按照前缀和大小进行从小到大排序.随后进行遍历,如果满足下标data[i-1].id<data[i].id&& ...
- CSP认证201703-4 地铁修建[C++题解]:连通路径上的最大边权最小、bfs求边权为1的最短路、二分查找
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 题目给定n个点和m条边,要求最多选择n条边,使得1到n连通,然后每段路同时开工,求最小工时.换句话说,求的是连通路上最大边权最小. ...
- oracle报错ora-00054,ora-00054资源正忙的解决办法-Oracle
无论插值还是做其他操作,提示ora-00054 资源正忙的错误. 就我碰到的例子,分为两种,一种是因为杀掉了进程,但还没彻底释放掉,处理办法如下: --查出SPID select spid, osus ...
- 51nod 1393 0和1相等串 思路 : map存前缀和
题目: 思路:把'0'当成数字-1,'1'当成数字1,求前缀和,用map更新当前前缀和最早出现的位置.(用map而不用数组是因为可能会出现负数) 当前缀和的值之前出现过,比如i = 10时,sum = ...
- 51nod-1065:最小正子段和
1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一个子 ...
- django中,kindeditor存到数据库的html,前台html标签被自动转义的解决办法
2019独角兽企业重金招聘Python工程师标准>>> 1,使用kindeditor进行了上传图片功能,存储到后台的html代码为: <img src="/stati ...
- jpsnamenode和不显示_hadoop启动后jps查不到namenode的解决办法
最近由于项目需要开始接触hadoop,在配置伪分布式启动后,jps查询进程发现少了namenode,而DataNode却存在. 下面是我的core-site.xml和hdfs-site.xml配置: ...
- GitHub的镜像登陆显示Whoa there!解决办法
使用其他github镜像存在的Whoa there!问题 GitHub做了反爬虫措施,使得如果你用镜像总会显示Whoa there! 解决办法是右键--重新加载即可 dns查找工具 http://to ...
- wps(word)复制过来的文字一行字数不足却自动换行解决办法
问题描述: 在wps或者word里粘贴网页上复制过来的文字常常会出现每行字数不足换行要求却提前换行的情况,如下图所示 问题分析: 出现这种情况主要是从网页上复制过来的文字保留了原网站的段落标记/手动换 ...
最新文章
- 19、修改和删除事件(ALTER/DROP EVENT)
- 完成GitHub个人主页设计,只需要这三步
- 浅谈EntityFramework框架的使用
- 分布式事物(2PC,3PC,CAP,柔性与刚性事物,LCN)
- poj3278 CatchThatCow bfs
- 微博发布公告 将开展财经违规内容专项整治行动
- python给内置函数重命名_python – 以Pandas Groupby函数重命名列名
- security框架工作笔记001--- Shiro和Spring Security对比_智慧城市项目中选型用Spring Security
- Java-Integer和int有什么区别
- 【实验记录】Fashion-Mnist分类实验记录
- XE7 Unit scope names
- Python核心编程--学习笔记--8--条件与循环
- 用户行为分析最重要的3个点 渠道转化留存
- 不足百行代码 实体数组转DataTable通用类
- LookaHead优化器
- 自定义异常 extends Exception
- 火狐浏览器打开IE窗口/IE跳谷歌页面等 --- 自定义协议---手动执行注册表
- 测试用例设计——微信发朋友圈(详细)
- 【Python处理EXCEL】--pandas导入Excel文件
- 电脑桌面计算机打开很慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...
热门文章
- #天天复制,今天写一个# 把文字转为图片
- SQL Server中读取XML文件的简单做法
- 请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同...
- 上周新闻回顾:微软补丁个个紧急 奥运网络百花齐放
- 人工智能和区块链的融合
- 数字货币EOS半年时间暴跌90%多,还可追捧吗?
- es6 generator_让我们探索一下ES6 Generators
- Spark集群启动时worker节点启不起来
- Spring Cloud应用开发(四:服务容错保护)
- CSS浮动元素特点有什么