求助
查看原帖
求助
38886
越学越掂楼主2023/9/15 20:16
#include<iostream>
#include<queue>
#define ll long long
using namespace std;

priority_queue<ll> dif;
ll n, m, k, r, l, a[100005], d[100005];

ll solve(ll x) {
	d[m] = x;
	ll sum = 0, res = 0;
	while (dif.size())
		dif.pop();
	for (ll i = 1; i <= k; i++) {
		dif.push(d[i]);
		sum += d[i];
	}
	res += sum;
	for (ll i = k + 1; i <= n; i++)
		if (d[i] > dif.top()) {
			sum -= dif.top();
			dif.pop();
			dif.push(d[i]);
			sum += d[i];
			res += sum;
		}
	return res;
}

int main() {
	cin >> n >> m >> k >> l >> r;
	for (ll i = 1; i <= n; i++)
		cin >> d[i];
	ll cnt = 0;
	ll left = 0, right = 1e9;
	while (left < right) {
		ll mid = (left + right + 1) / 2;
		if (solve(mid) <= r) {
			left = mid;
			cnt++;
		}
		else
			right = mid - 1;
	}
	ll ans = solve(left);
	if (left <= ans && right >= ans)
		cout << ans;
	else
		cout << "-1";
	return 0;
}
2023/9/15 20:16
加载中...