1600*C2. Potions (Hard Version)(贪心&优先队列)

Problem - 1526C2 - Codeforces

1600*C2. Potions (Hard Version)(贪心&优先队列)_第1张图片

1600*C2. Potions (Hard Version)(贪心&优先队列)_第2张图片

 解析:

        sum每次累计序列值,并且将负数放入优先队列。当sum变为负数时,不断弹出最小的负数使sum变为正数,并且维护sum中的数字个数。

#include
using namespace std;
#define int long long
const int N=2e5+5;
int n,a[N],sum;
priority_queue,greater>q;
signed main(){
	scanf("%lld",&n);
	int cnt=0,res=0;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		if(a[i]<0) q.push(a[i]);
		sum+=a[i];		//累计当前总和 
		cnt++;		
		while(sum<0){	//sum变为负数,则不断弹出最小的负数 
			sum-=q.top();
			q.pop();
			cnt--;
		}
		res=max(res,cnt);	//统计最大数量 
	}
	cout<

你可能感兴趣的:(codeforces,算法,数据结构,c语言,贪心,优先队列)