E. Kolya and Movie Theatre

https://codeforces.com/contest/1862/problem/E

E. Kolya and Movie Theatre_第1张图片

容易发现就是维护一个长度至多为m的序列和 减去 i*d(i为最后选择看电影的是哪一天)

一开始没有把第0天的p是0用上,没想出来

维护非负序列和这里可以用一个set,有点类似于滑动窗口,当窗口出去的时候我们去掉最没用的那一项就可以了

#include
using namespace std;
using ll=long long;
const int N = 2e5+10;

void solve()
{
	ll n,m,d;cin>>n>>m>>d;
	vectora(n+10);
	for(int i=0;i>a[i];
	
	set>st;
	ll ans = 0,sum = 0;
	
	for(int i=0;i0){
			st.insert({a[i],i});
			sum+=a[i];
			if(st.size()>=m){
				sum-=(st.begin()->first);
				st.erase(st.begin());
			}
		} 
	}
	
	cout<>_;
	while(_--)solve();
	return 0;
}

你可能感兴趣的:(模拟,思维,贪心,算法,数据结构)