蒟蒻求助一下 AT ABC-281 T5 (也就是上周的)
  • 板块学术版
  • 楼主rsy_
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/12/15 10:45
  • 上次更新2023/10/24 07:40:08
查看原帖
蒟蒻求助一下 AT ABC-281 T5 (也就是上周的)
550775
rsy_楼主2022/12/15 10:45

麻烦大佬们看一下,蒟蒻看不出来哪里错了。。

#include <bits/stdc++.h>
#define LL long long
#define rep(i,j,k) for(int i = j; i <= k; i ++ )
#define per(i,j,k) for(int i = j; i >= k; i -- )

using namespace std;
const int N = 200010;

int n, m, k, a[N];
LL ans;
multiset<int> u, v; 

int main() {
	scanf("%d%d%d", &n, &m, &k);
	rep(i,1,n) scanf("%d", &a[i]);
	for(int i = 1; i <= m; i ++ ){
		u.insert(a[i]); ans += a[i];
		if(u.size() > k){
			ans -= *u.rbegin();
			v.insert(*u.rbegin());
			u.erase(--u.end());
		}
	}
	printf("%lld ", ans);
	for(int i = m + 1; i <= n; i ++ ){
		int w = a[i - m];
		u.insert(a[i]); ans += a[i];
		if(u.size() > k){
			ans -= *u.rbegin();
			v.insert(*u.rbegin());
			u.erase(--u.end());
		}
		if(w <= *u.begin()) ans -= w, u.erase(u.find(w)), ans += *v.begin(), u.insert(*v.begin()), v.erase(v.begin());
		else v.erase(v.find(w));
		printf("%lld ", ans); 
	}
	return 0;
}

谢谢大佬,Thanks♪(・ω・)ノ

2022/12/15 10:45
加载中...