当前位置:网站首页>Codeforces - 1526C1&&C2 - Potions
Codeforces - 1526C1&&C2 - Potions
2022-07-06 09:28:00 【你好_Ä】
Codeforces - C1&&C2 - Potions
There are n potions in a line, with potion 1 on the far left and potion n on the far right. Each potion will increase your health by ai when drunk. ai can be negative, meaning that potion will decrease will health.
You start with 0 health and you will walk from left to right, from first potion to the last one. At each potion, you may choose to drink it or ignore it. You must ensure that your health is always non-negative.
What is the largest number of potions you can drink?
Input
The first line contains a single integer n (1≤n≤200000) — the number of potions.
The next line contains n integers a1, a2, … ,an (−109≤ai≤109) which represent the change in health after drinking that potion.
Output
Output a single integer, the maximum number of potions you can drink without your health becoming negative.
Example
input
6
4 -4 1 -3 1 -3
output
5
问题解析
这题是说有n瓶药,吃了之后会恢复a[i]点生命值或减少a[i]点生命值,你从左往右按顺序吃(也可以选择不吃),问你在生命值不为负的情况下能吃几瓶药。
因为c1和c2仅有数据大小的差异,我就直接按照c2来写,这题可以直接贪心写,把那些小的药水都忽略掉即可。
我们可以准备一个小根堆,从左往右将药剂插入小根堆中,当小根堆总和为负了,就把它最小的元素弹出,直到总和不为负为止,在此过程中维护一下吃下药水数的最大值即可。每次插入和弹出都是logn,所以总复杂度才nlogn。
AC代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>
#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;
int n, m;
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
int n;
cin >> n;
vector<int>v(n);
priority_queue<int,vector<int>,greater<int>>que;
int res = 0,ans=0;
for (int i = 0; i < n; i++)
{
cin >> v[i];
que.push(v[i]);
res += v[i];
while (res < 0)
{
res -= que.top();
que.pop();
}
ans = max(ans, (ll)que.size());
}
cout << ans << endl;
return 0;
}
边栏推荐
猜你喜欢

第 300 场周赛 - 力扣(LeetCode)

(POJ - 3579) median (two points)

b站 實時彈幕和曆史彈幕 Protobuf 格式解析

Suffix expression (greed + thinking)

Differential (one-dimensional, two-dimensional, three-dimensional) Blue Bridge Cup three body attack

Information security - Analysis of security orchestration automation and response (soar) technology

TCP's three handshakes and four waves

1605. Sum the feasible matrix for a given row and column

b站 实时弹幕和历史弹幕 Protobuf 格式解析

605. Planting flowers
随机推荐
第 300 场周赛 - 力扣(LeetCode)
渗透测试 ( 2 ) --- 渗透测试系统、靶机、GoogleHacking、kali工具
Analyse du format protobuf du rideau en temps réel et du rideau historique de la station B
Information security - Epic vulnerability log4j vulnerability mechanism and preventive measures
1689. Ten - the minimum number of binary numbers
Auto. Getting started with JS
【练习-2】(Uva 712) S-Trees (S树)
QT实现圆角窗口
MySQL import database error [err] 1273 - unknown collation: 'utf8mb4_ 0900_ ai_ ci’
[analysis of teacher Gao's software needs] collection of exercises and answers for level 20 cloud class
MySQL授予用户指定内容的操作权限
图图的学习笔记-进程
X-forwarded-for details, how to get the client IP
QT有关QCobobox控件的样式设置(圆角、下拉框,向上展开、可编辑、内部布局等)
Web based photo digital printing website
Penetration test (1) -- necessary tools, navigation
QT按钮点击切换QLineEdit焦点(含代码)
渗透测试 ( 8 ) --- Burp Suite Pro 官方文档
Write web games in C language
渗透测试 ( 4 ) --- Meterpreter 命令详解