Submission #1206113

#TimeUsernameProblemLanguageResultExecution timeMemory
1206113rcllPalembang Bridges (APIO15_bridge)C++20
100 / 100
104 ms3512 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

bool cmp(pair<int,int> a,pair<int,int> b) {
    return a.first+a.second<b.first+b.second;
}

priority_queue<int> lpq;
priority_queue<int,vector<int>,greater<int>> rpq;
ll lsum,rsum;

void insert(int x) {
    int median=(lpq.size() ? lpq.top() : 1000000001);
    if (x <= median) {
        lpq.push(x);
        lsum+=x;
    } else {
        rpq.push(x);
        rsum+=x;
    }
    if (rpq.size()+1<lpq.size()) {
        int nxt=lpq.top();
        lpq.pop();
        rpq.push(nxt);
        lsum-=nxt;
        rsum+=nxt;
    } else if (lpq.size()<rpq.size()) {
        int nxt=rpq.top();
        rpq.pop();
        lpq.push(nxt);
        rsum-=nxt;
        lsum+=nxt;
    }
}

ll pref[100001];

int main() {
    int k,n;
    ll same_side=0;
    vector<pair<int,int>> v={{0,0}};
    cin >> k >> n;
    for (int i=0; i<n; i++) {
        char a,b;
        int x,y;
        cin >> a >> x >> b >> y;
        if (a==b) {
            same_side+=abs(x - y);
        } else {
            v.push_back({x,y});
        }
    }
    sort(v.begin(),v.end(),cmp);
    n=v.size() - 1;
    same_side+=n;
    lsum=rsum=0;
    for (int i=1; i<=n; i++) {
        insert(v[i].first);
        insert(v[i].second);
        pref[i]=rsum - lsum;
    }
    ll ans=pref[n];
    if (k==2) {
        while (lpq.size()) {
            lpq.pop();
        }
        while (rpq.size()) {
            rpq.pop();
        }
        lsum=rsum=0;
        for (int i=n; i; i--) {
            insert(v[i].first);
            insert(v[i].second);
            ans=min(ans,rsum-lsum+pref[i -1]);
        }
    }
    cout << same_side+ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...