Codeforces Round 894 (Div. 3) D

题目:E. Kolya and Movie Theatre
题目链接:https://codeforces.com/contest/1862/problem/E
思路:主要用优先队列存放大于0的元素,然后除了第一个数据后的每m个数据就可以存放到记录数组里面,最后遍历找价值最大的

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
 
int n,m,d,a[200005],b[200005];
 
void solve()
{
	priority_queue<int,vector<int>,greater<int> >q;
	cin>>n>>m>>d;
	for(int i=1;i<=n;i++) cin>>a[i];
	int s=0,ans=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i]>0)
		{
			s+=a[i];
			q.push(a[i]);
			while(q.size()>m) s-=q.top(),q.pop();
		}
		b[i]=s;
	}
	for(int i=1;i<=n;i++) ans=max(ans,b[i]-d*i);
	cout<<ans<<endl;
}
 
signed main()
{
	int t;
	scanf("%lld\n",&t);
	while(t--) solve();
	return 0;
}



posted @ 2024-08-16 15:26  xue567  阅读(15)  评论(0)    收藏  举报