Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5 + 5;
- struct Element {
- int price;
- int prob;
- bool operator < (const Element &o) const {
- return price * 100 + o.price * o.prob > o.price * 100 + price * prob;
- }
- } a[N];
- long long prefix[N];
- long long suffix[N];
- int n, m, k;
- long long solve() {
- sort(a + 1, a + 1 + n);
- multiset<int> S;
- long long sum = 0;
- for (int i = 1; i <= n; ++i) {
- S.insert(a[i].price);
- sum += a[i].price;
- if (S.size() > k) {
- sum -= *S.begin();
- S.erase(S.begin());
- }
- prefix[i] = sum * 100;
- }
- S.clear(); sum = 0;
- for (int i = n; i >= 1; --i) {
- S.insert(a[i].price * a[i].prob);
- sum += a[i].price * a[i].prob;
- if (S.size() > (m - k)) {
- sum -= *S.begin();
- S.erase(S.begin());
- }
- suffix[i] = sum;
- }
- long long ans = 0;
- for (int i = k; i + (m - k) <= n; ++i) {
- ans = max(ans, prefix[i] + suffix[i + 1]);
- }
- return ans;
- }
- int main() {
- cin >> n >> m >> k;
- for (int i = 1; i <= n; ++i) {
- cin >> a[i].price;
- cin >> a[i].prob;
- }
- cout << solve() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement