【zznu-2060】 Minsum Plus(最小正子段和)
题目描述
输入
输出
输出最小的正子段和
样例输入
3
-1 2 3
样例输出
1
思路
记录前缀和,然后排序,满足前缀和之差最小和下标递增的关系就行,注意longlong!!longlong!!
#include <bits/stdc++.h>
using namespace std;
const int N = ;
typedef long long LL;
struct node
{
LL x, y;
} q[N];
bool cmp(node a, node b)
{
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}
int main()
{
int n, x;
cin>>n;
for(LL i = ; i <= n; i++)
{
scanf("%d", &x);
q[i].x = q[i-].x + x;
q[i].y = i;
}
sort(q+, q++n, cmp);
LL ans = 1e18;
int base = ;
for(int i = ; i <= n; i++)
{
if(q[i].x > q[base].x && q[i].y > q[base].y)
{
ans = min(ans, q[i].x - q[base].x);
base++;
i = base;
}
}
if(ans == 1e18) puts("no solution");
else
printf("%lld\n", ans);
return ;
}
也可以利用set和lower_bound写
#include <bits/stdc++.h>
using namespace std;
const int N = ;
typedef long long LL;
LL a[N];
set<LL>S;
int main()
{
int n, x;
cin>>n;
for(int i = ; i <= n; i++)
{
scanf("%d", &x);
a[i] = a[i-] + x;
}
S.clear();
LL ans = 1e18;
for(int i = ; i <= n; i++)
{
S.insert(a[i]);
if(a[i] > )
ans = min(ans, a[i]);
set<LL>::iterator it = S.lower_bound(a[i]);
if(it == S.begin()) continue;
it--;
if(a[i] - (*it) <= ) continue;
ans = min(ans, a[i] - (*it));
}
if(ans == 1e18) puts("no solution");
else printf("%lld\n", ans);
return ;
}
【zznu-2060】 Minsum Plus(最小正子段和)的更多相关文章
- 51nod 1065 最小正子段和
题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...
- AC日记——最小正子段和 51nod 1065
最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...
- 51nod-1065:最小正子段和(STL)
N个整数组成的序列a11,a22,a33,…,ann,从中选出一个子序列(aii,ai+1i+1,…ajj),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如:4,-1 ...
- 51nod 1065:最小正子段和
1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...
- 51nod-1065 最小正子段和 【贪心 + 思维】
N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一个子序列(a[i],a[i+1],-a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如 ...
- [51nod1065]最小正子段和
题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...
- 51nod 1065 最小正子段和 (贪心)
题目:传送门. 题意:中文题. 题解:求前缀和,并且标记每个数的下标,按照前缀和大小进行从小到大排序.随后进行遍历,如果满足下标data[i-1].id<data[i].id&& ...
- [51NOD1065] 最小正子段和(STL,前缀和)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1065 估计没人这么做吧-用一个set维护前缀和,但是set的l ...
- 51Node 1065----最小正子段和
51Node 1065----最小正子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这 ...
随机推荐
- 这几天添加ccbi 出现的问题
父类是一个ccbi...在父类的onNodeLoaded 里面添加子类的ccbi ... 出现了父类为空的情况...获取不到时间轴..动画为空... 需要在父类的onEnter里面写添加子类的ccbi ...
- windows下mysql安装失败的一个解决案例
操作系统:windows8.1,之前安装过mysql,这次安装在配置的最后一部执行“Apply security settings”的过程中弹出经典错误: Access denied for user ...
- 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法
在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...
- python2与python3语法区别之_重定向
python2与python3两版本的区别是众所周知的,今天主要记录python下版本2 与版本3的区别 python2 In [7]: logfile = open('/tmp/mylog.log' ...
- win10家庭版的defender注册表关闭和开启
关闭方法: 打开“命令提示符(管理员)”,然后输入: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defe ...
- django中的分页设置
1.在控制台中的展示 from django.core.paginator import Paginator iter = 'abcdefghijklmn' inator = Paginator(it ...
- linux centos7安装phpMyAdmin详解,以及解决各种bug问题
使用php和mysql开发网站的话,phpmyadmin和navicat是目前非常好的mysql管理工具,但是phpmyadmin最主要是免费开源,目前很多集成的开发环境都会自带phpmyadmin, ...
- IPFS星际节点网站 IPNS域名解析教程
IPNS星际文件系统IPFS提供的域名命名空间,相当于经典HTTP协议中的DNS.只不过是,IPNS是将内容寻址的哈希值(HASH值)转换为域名,而DNS是将IP地址转换为域名. 前段时间,IPFS协 ...
- TP5接受Vue跨域请求
<?php /** * Created by PhpStorm. * User: qianglong * Date: 2018/1/15 * Time: 17:56 */ namespace a ...
- sql 筛选表中指定字段包含26某个小写字母
SELECT *from 表名WHERE 字段 COLLATE Chinese_PRC_CS_AS LIKE '%[abcdefghijklmnopqrstuvwxyz]%'筛选表中指定字段包含26某 ...