链接:https://ac.nowcoder.com/acm/contest/949/D
来源:牛客网

小阳买水果

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述

水果店里有 n个水果排成一列。店长要求顾客只能买一段连续的水果。 小阳对每个水果都有一个喜爱程度 ai,
最终的满意度为他买到的水果的喜欢程度之和。 如果和为正(不管是正多少,只要大于 0 即可),他就满意了。
小阳想知道在他满意的条件下最多能买多少个水果。 你能帮帮他吗?

输入描述:

第一行输入一个正整数 n,表示水果总数。

第二行输入 n 个整数 a i ai,表示小阳对每个水果的喜爱程度。

输出描述:

一行一个整数表示结果。(如果 1 个水果都买不了,请输出 0)

示例1

输入

5
0 0 -7 -6 1

输出

1

备注:

1≤n≤2×10e6

|ai|≤10e3

先上代码

//MADE BY Y_is_sunshine;
//#include <bits/stdc++.h>
//#include <memory.h>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <cstdio>
#include <vector>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>#define INF 0x3f3f3f3f
#define MAXN 2000005using namespace std;struct node {int sum;int pos;node() {sum = 0;pos = 0;}
}a[MAXN];bool cmp(node x, node y) {if (x.sum == y.sum)return x.pos > y.pos;return x.sum < y.sum;
}int main()
{//freopen("data.txt", "r", stdin);int N;cin >> N;for (int i = 1; i <= N; i++) {int b;scanf("%d", &b);a[i].sum = a[i - 1].sum + b;a[i].pos = i;}N++; a[N].pos = a[N].sum = 0;sort(a + 1, a + N + 1, cmp);int ans = 0;int last = N;for (int i = 1; i <= N; i++) {last = min(last, a[i].pos);if (last < a[i].pos)ans = max(ans, a[i].pos - last);}cout << ans << endl;//freopen("CON", "r", stdin);system("pause");return 0;
}

看不懂吧 我就知道~
开始解释~
首先排序按照前pos项和的大小排序
什么意思呢 这是让我们最后维护ans的时候后面要用的数一定覆盖前面的数
好吧听不懂
就是说如果1~5的和是 -5 1~7的和是-3
那么5~7一定是符合要求的一段区间

讲一下last的维护
如果1~6的值=-4
并且1-3的值是-3
那是不是last就可以等于3 然后后面的a[i].pos-last会更高并且符合题意

cmp的排序为什么当sum相等的时候按照地址从大到小排序?


显然 a-b是不符合条件的 ==0嘛
那么你最先就不能用小的地址去更新last的值

细心地童鞋是不是已经发现学会了前面的还过不去
sort上面还有一行。。。
当所有数据都是1的时候
a[i].sum=i;ans=a[i].pos-a[i-1].pos+1;

就酱紫~

牛客小白月赛19 D题 小阳买水果相关推荐

  1. 牛客小白月赛19 题解

    牛客小白月赛19 A. 「水」滔天巨浪(思维) B. 「木」迷雾森林 (数字三角形模型) C. 「土」秘法地震(二维前缀和) F. 「水」悠悠碧波 (字符串) D. 「金」初心如金 (找规律) G. ...

  2. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

    链接:https://www.nowcoder.com/acm/contest/135/C 来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使 ...

  3. 牛客小白月赛25 补题+题解[A-J]

    加油加油加油! 文章目录 A.AOE还是单体? B.k-size字符串 C.白魔法师 D.抽卡 E.点击消除 F.疯狂的自我检索者 G.解方程 H.神奇的字母(二) I.十字爆破 J.异或和之和 A. ...

  4. 【dfs序+树状数组】多次更新+求结点子树和操作,牛客小白月赛24 I题 求和

    前置知识点 dfs遍历 树状数组/线段树知识 链接 I题 求和. 题意 已知有 n 个节点,有 n−1 条边,形成一个树的结构. 给定一个根节点 k,每个节点都有一个权值,节点i的权值为 vi 给 m ...

  5. 牛客小白月赛16 小石的签到题(博弈)

    牛客小白月赛16 小石的签到题 链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 题目描述 输入描述: 共一行,输入一个数 nnn . 输出描述: ...

  6. 牛客小白月赛2 B.小马过河

    牛客小白月赛2 B.小马过河 题目链接 题目描述 E t e ˊ r e o \mathrm{Et\acute{e}reo} Eteˊreo 开始涉猎几何领域了.他现在正在研究小马喝水问题. 众所周知 ...

  7. 牛客小白月赛58 B(暴力)C(思维)D(dp滚动数组优化)

    牛客小白月赛58 感觉没什么意思,这场月赛出题人有点问题. B 题意:给定一定的数据填充顺序和每一个填充层的名称,只有填充满了上一层才可以填充下一层. 但是每一层又属于某一个大层,一个大层中包含了若干 ...

  8. 牛客小白月赛60(A~C)题解

    原题地址:牛客小白月赛60_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 题目A:小竹与妈妈 题意:输出(x-b)/a即可,没什么好说 代码: #include< ...

  9. 牛客小白月赛27 B.乐团派对

    牛客小白月赛27 B.乐团派对 题目链接 题目描述 音乐是带给大家快乐的存在,而你的目标就是组建若干支乐队,让世界听到你们的演奏! 你目前有 nnn 位乐手,每位乐手只能进入一个乐队,但并不是每位乐手 ...

最新文章

  1. 基于XFS的NAS数据恢复可以做了
  2. Python time 100 天以后的日期
  3. Eclipse中JBOSS莫名其妙自动关闭
  4. day13【前台】搭建环境
  5. Money Pro for Mac如何导入账单?
  6. 互联网金融的前世、今生和未来-系列三(今生):一场跨界的战争
  7. 无法定位程序输入点 except_python自制王者荣耀抽卡程序
  8. 机房服务器存放位置要求,服务器机房建设设计要求规范.doc
  9. OMRON欧姆龙驱动器维修R88D-KT06F-Z过压故障处理
  10. 解决Specifying a namespace in include()withou providing an app_name
  11. Sumatra PDF——好用快捷工具介绍及使用
  12. excel几个数相加等于某个数_EXCEL如何求出哪几个单元格里的数字之和等于某个特定值...
  13. 王阳明让你内心强大的100句名言
  14. 成功解决python.exe无法找到程序入口 无法定位程序输入点
  15. 正方形数目 cmp 栈
  16. python-urllib3
  17. 基于全基因组的基因家族分析的初尝试
  18. 利用Windows自带的计算器计算十六进制(八进制、二进制)数据
  19. 一个无损连接和保持函数依赖性的3nf分解
  20. 网络工程师的敲门砖,2022最新HCIA-Datacom题库H12-811首发分享

热门文章

  1. CEILING函数用法
  2. SQL left join 左表合并去重技巧总结
  3. 可以输入的最大单词数—C语言一文搞腚
  4. 服务器临时文件无法删掉,“internet临时文件”始终删不掉如何解决?临时文件无法删除的清理方法...
  5. 华为荣耀5cvs华为v9play_荣耀v9play和华为畅享6s哪个值得买?华为畅享6s与荣耀v9 play区别对比评测...
  6. 郑清 - 日常作息表(2020-01)
  7. 网优谷与你一起嗅出未来互联网新趋势~
  8. 记录日记2021-11-12
  9. mysql.sock作用-解决mysql.sock直接找不到了的问题-重新生成mysql.sock
  10. iOS的Aspects简单使用