Submission #638110

#TimeUsernameProblemLanguageResultExecution timeMemory
638110tvladm2009Schools (IZhO13_school)C++14
75 / 100
222 ms15404 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;

const int MAX_N = 3 * 1e5;

int a[MAX_N + 1], b[MAX_N + 1], pref[MAX_N + 1], suf[MAX_N + 1];
pair<int, int> c[MAX_N + 1];
multiset<int> DS;

int n, m, s;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m >> s;
    for (int i = 1; i <= n; i++) {
        cin >> a[i] >> b[i];
    }

    for (int i = 1; i <= n; i++) {
        c[i] = make_pair(b[i] - a[i], i);
    }
    sort(c + 1, c + n + 1);
    int sum = 0;
    for (int i = 1; i <= m; i++) {
        DS.insert(a[c[i].second]);
        sum += a[c[i].second];
    }
    pref[m] = sum;
    for (int i = m + 1; i <= n; i++) {
        DS.insert(a[c[i].second]);
        sum += a[c[i].second];
        sum -= *DS.begin();
        DS.erase(DS.begin());
        pref[i] = sum;
    }
    DS.clear();
    sum = 0;
    for (int i = n - s + 1; i <= n; i++) {
        DS.insert(b[c[i].second]);
        sum += b[c[i].second];
    }
    suf[n - s + 1] = sum;
    for (int i = n - s; i >= 1; i--) {
        DS.insert(b[c[i].second]);
        sum += b[c[i].second];
        sum -= *DS.begin();
        DS.erase(DS.begin());
        suf[i] = sum;
    }

    ll ans = 0;
    for (int i = 1; i <= n; i++) {
        ans = max(ans, (ll)pref[i] + suf[i + 1]);
    }
    cout << ans;

    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...