Submission #444008

#TimeUsernameProblemLanguageResultExecution timeMemory
444008JovanBSchools (IZhO13_school)C++17
100 / 100
191 ms16236 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;

const int MAXN = 300000;

pair <int, int> a[MAXN+5];

multiset <int> vals;

ll pref[MAXN+5];
ll suf[MAXN+5];

int main(){
    ios_base::sync_with_stdio(false), cin.tie(0);
    cout.precision(10);
    cout << fixed;

    int n, m, s;
    cin >> n >> m >> s;
    for(int i=1; i<=n; i++){
        cin >> a[i].first >> a[i].second;
    }
    sort(a+1, a+1+n, [](pair <int, int> x, pair <int, int> y){ return x.first - x.second > y.first - y.second; });
    ll sum = 0;
    for(int i=1; i<=n; i++){
        if(vals.size() < m){
            vals.insert(a[i].first);
            sum += a[i].first;
        }
        else if(vals.size() && *vals.begin() < a[i].first){
            sum -= *vals.begin();
            vals.erase(vals.begin());
            vals.insert(a[i].first);
            sum += a[i].first;
        }
        pref[i] = sum;
    }
    sum = 0;
    vals.clear();
    for(int i=n; i>=1; i--){
        if(vals.size() < s){
            vals.insert(a[i].second);
            sum += a[i].second;
        }
        else if(vals.size() && *vals.begin() < a[i].second){
            sum -= *vals.begin();
            vals.erase(vals.begin());
            vals.insert(a[i].second);
            sum += a[i].second;
        }
        suf[i] = sum;
    }
    ll res = 0;
    for(int i=1; i<=n; i++) res = max(res, pref[i] + suf[i+1]);
    cout << res << "\n";
    return 0;
}

Compilation message (stderr)

school.cpp: In function 'int main()':
school.cpp:29:24: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   29 |         if(vals.size() < m){
      |            ~~~~~~~~~~~~^~~
school.cpp:44:24: warning: comparison of integer expressions of different signedness: 'std::multiset<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |         if(vals.size() < s){
      |            ~~~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...