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

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

题目简化和分析:

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

  • 任意前缀和 \(\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. ArrayList 扩容机制

    ArrayList 基本介绍 ArrayList实现了List接口.它可以存储包括null的任何类型的对象,允许重复元素.ArrayList在内部使用一个数组来存储元素,当元素数量超过数组容量时,Ar ...

  2. 【笔试实战】LeetCode题单刷题-编程基础 0 到 1【三】

    682. 棒球比赛 题目链接 682. 棒球比赛 题目描述 你现在是一场采用特殊赛制棒球比赛的记录员.这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分. 比赛开始时,记录是空白的.你 ...

  3. Typecho左右侧广告区域展示恋爱线时间

    该教程适用typecho动态博客框架,handsome主题,展示恋爱线时间,效果立于博客网页左侧右侧等区域,展示如下: 教程 typecho动态博客框架,handsome主题下,将下面代码粘贴到后台设 ...

  4. 图像格式及Matlab的格式转换

    1. matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点doubl ...

  5. Cloudflare 重定向配置

    最近把之前的一个网站域名换成另一个域名,想要添加一下重定向,避免流量流失(虽然本来就没流量).然后在 Cloudflare 配置时尝试多次都失败了,遇到各种 Your connection is no ...

  6. Unity UGUI的LayoutElement(布局元素)组件的介绍及使用

    Unity UGUI的LayoutElement(布局元素)组件的介绍及使用 1. 什么是LayoutElement组件? LayoutElement是Unity UGUI中的一个布局元素组件,用于控 ...

  7. test.sh

    #!/bin/bash echo "=== show OS version ===" cat /etc/os-release echo "=== show IP addr ...

  8. sudo:pam_open_session Permission denied 与 Too many open files

    sudo:pam_open_session Permission denied 一,验证 sudo 权限失败: /etc/sudoers 文件未给相关用户配置权限. 打开 /etc/sudoers 文 ...

  9. java位运算及移位运算你还记得吗

    本文中所提到的运算都是基于整数来说的,因为只有整数(包括正数和负数)在操作系统中是以二进制的补码形式运算的,关于原码.反码.补码.位运算.移位运算的背景这里不再介绍,网上资料很多,感兴趣的可自行搜索. ...

  10. webpack dev server 与 hot module replace 提高开发效率

    通过 webpack 命令编译源代码时,如果我们对源代码进行了修改,需要重新执行命令才能看到编译后的效果. 这样在开发中非常的影响效率,如果存在一种方式,当文件被修改时,webpack 自动监听重新编 ...