Submission #499135

#TimeUsernameProblemLanguageResultExecution timeMemory
499135infertechno2Schools (IZhO13_school)C++17
100 / 100
110 ms14128 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll Size=3e5+10;
pair<ll,ll> a[Size];
ll ansm[Size],anss[Size];

bool comp(const pair<ll,ll>& A,const pair<ll,ll>& B){
    return (A.first-A.second)<(B.first-B.second);
}

void solve(){
    ll n,m,s;
    cin>>n>>m>>s;
    for(ll i=1;i<=n;i++){
        cin>>a[i].first>>a[i].second;
    }
    sort(a+1,a+n+1,comp);
    priority_queue<ll,vector<ll>,greater<ll>> to_remove;
    ll ans_for_s=0;
    for(ll i=1;i<=n;i++){
        to_remove.push(a[i].second);
        ans_for_s+=a[i].second;
        if(to_remove.size()>s){
            ans_for_s-=to_remove.top();
            to_remove.pop();
        }
        anss[i]=ans_for_s;
    }
    while(!to_remove.empty()){
        to_remove.pop();
    }
    ll ans_for_m=0;
    for(ll i=n;i>0;i--){
        to_remove.push(a[i].first);
        ans_for_m+=a[i].first;
        if(to_remove.size()>m){
            ans_for_m-=to_remove.top();
            to_remove.pop();
        }
        ansm[i]=ans_for_m;
    }
    ll ans=0;
    for(ll i=0;i<=n;i++){
        ans=max(ans,anss[i]+ansm[i+1]);
    }
    cout<<ans<<endl;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ll t=1;
    while(t--){
        solve();
    }
    return 0;
}

Compilation message (stderr)

school.cpp: In function 'void solve()':
school.cpp:27:28: warning: comparison of integer expressions of different signedness: 'std::priority_queue<long long int, std::vector<long long int>, std::greater<long long int> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   27 |         if(to_remove.size()>s){
      |            ~~~~~~~~~~~~~~~~^~
school.cpp:40:28: warning: comparison of integer expressions of different signedness: 'std::priority_queue<long long int, std::vector<long long int>, std::greater<long long int> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   40 |         if(to_remove.size()>m){
      |            ~~~~~~~~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...