与简单版的思路完全一致,只需要改一下范围。

可以去看我简单版本的博客。

题目简化和分析:

给您一个数组,在其中选择若干个数使得:

  • 任意前缀和 \(\ge 0\)
  • 数量尽可能的大

我们可以使用贪心策略,策略如下:

  • 如果当前数为非负,必喝。
  • 而毒药尽可能的多喝,如果喝没了,就把最小的吐了。

以上操作可以采用优先队列去优化。

重载运算符

struct node{
ll v;
bool operator <(const node &x)const{
return x.v<v;
}
}; priority_queue<node> q;

既然理解了思路可以动手了。

Solution:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db; const int N=2e5+50;
const int M=1e5+50; inline ll read(){
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
} ll n;
ll a[N]; struct node{
ll v;
bool operator <(const node &x)const{
return x.v<v;
}
}; priority_queue<node> q; int main()
{
n=read();
for(int i=1;i<=n;++i) a[i]=read();
ll ans=n,res=1,cnt=0;
while(res<=n)
{
cnt+=a[res];
q.push((node){a[res]});
if(cnt<0){
node tmp=q.top();
cnt-=tmp.v;
q.pop();
--ans;
}
++res;
}
printf("%lld\n",ans);
return 0;
}

随机推荐

  1. 【python基础】文件-初识文件

    文本文件可存储的数据量是非常多的.每当需要分析或修改存储在文件中的信息时,首先就是读取文件到内存中,为此可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取. 1.读取文件 1.1读取整个文件 ...

  2. celery笔记七之周期/定时任务及crontab定义

    本文首发于公众号:Hunter后端 原文链接:celery笔记七之周期/定时任务及crontab定义 periodic task,即为周期,或者定时任务,比如说每天晚上零点零分需要运行一遍某个函数,或 ...

  3. 使用MASA Stack+.Net 从零开始搭建IoT平台 第五章 使用时序库存储上行数据

    @ 目录 前言 分析 实施步骤 时序库的安装 解决playload没有时间戳问题 代码编写 测试 总结 前言 我们可以将设备上行数据存储到关系型数据库中,我们需要两张带有时间戳的表(最新数据表 和 历 ...

  4. PHP检查更新加载本地版本号并解压覆盖

    <?phperror_reporting(0);ob_implicit_flush(true);$begin = microtime(true);//检查更新,加载本地版本号$config = ...

  5. 行行AI人才直播第6期:当AIGC时代降临,当代青年如何把握新时代机遇

    AIGC时代的到来,给我们带来了无限的想象空间和创造力.AIGC不仅可以提高内容生产的效率和质量,还可以创造出人类无法想象的新颖和有价值的内容,为数字文化产业.产业互联网.社会价值等领域带来变革性的影 ...

  6. 【Linq】 join 子句中其中一个表达式的类型不正确。在对“GroupJoin”的调用中,类型推理失败。

    报错代码: 原因分析:on后面的两个关联条件 数据类型不匹配,调整为一致即可.

  7. 如何用Three.js + Blender打造一个web 3D展览馆

    作者:vivo 互联网前端团队- Wei Xing 运营活动新玩法层出不穷,web 3D炙手可热,本文将一步步带大家了解如何利用Three.js和Blender来打造一个沉浸式web 3D展览馆. 一 ...

  8. Map集合_HashMap_TreeMap_等_小记

    Map是一种依照键值对数据存储元素的容器. Map中的元素是两个对象,一个对象作为键,一个对象作为值.一个键(key)和它对应的值构成map集合中的一个元素.Map集合的数据结构只跟键有关,键不可以重 ...

  9. Python数据分析易错知识点归纳(四):Matplotlib

    四.matplotlib 基本特性 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y1 = ...

  10. 王道oj/problem15(用c++的引用精简代码)

    网址:http://oj.lgwenda.com/problem/15 思路:子函数的形参是指针的时候格式为 int*&p,且原函数实参为p 主函数使用fgets(字符串的指针,最大容量,st ...