代码求调,abcE题RE
  • 板块学术版
  • 楼主wizardMarshall
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/12/11 19:18
  • 上次更新2023/10/24 07:57:14
查看原帖
代码求调,abcE题RE
474470
wizardMarshall楼主2022/12/11 19:18

昨天ABC第281场E题,现在还是RE一个点,不知道是什么原因


#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[200005];
int t[200005];
multiset <int> ss, st;
signed main() {
	int n, m, k;
	cin >> n >> m >> k;
	int tot = 0;
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
	}for (int i = 1; i <= m; i++) {
		t[i] = a[i];
	}sort(t + 1, t + m + 1);
	int nowsum = 0;
	for (int i = 1; i <= k; i++) {
		nowsum += t[i];
		st.insert(t[i]);
	}for (int i = k + 1; i <= m; i++) {
		ss.insert(t[i]);
	}cout << nowsum << " ";
	for (int i = 2; i <= n - m + 1; i++) {
		if (a[i - 1] <= *(--st.end())) {
			st.erase(st.lower_bound(a[i - 1]));
			nowsum -= a[i - 1];
		}else {
			ss.erase(ss.lower_bound(a[i - 1]));
		}if (a[i + m - 1] < *(--st.end())) {
			st.insert(a[i + m - 1]);
			nowsum += a[i + m - 1];
		}else {
			ss.insert(a[i + m - 1]);
		}if (st.size() > k) {
			nowsum -= *(--st.end());
			ss.insert(*(--st.end()));
			st.erase((--st.end()));
		}else if (st.size() < k) {
			nowsum += *ss.begin();
			st.insert(*ss.begin());
			ss.erase(ss.begin());
		}printf("%lld ", nowsum);
	}return 0;
}

st是目前在最小值中的数,ss是不在最小值中的数

2022/12/11 19:18
加载中...