Submission #1352803

#TimeUsernameProblemLanguageResultExecution timeMemory
1352803nguyenkhangninh99Palembang Bridges (APIO15_bridge)C++20
100 / 100
46 ms7820 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
struct ENY{
    int suml = 0, sumr = 0;
    priority_queue<int> l;
    priority_queue<int, vector<int>, greater<int>> r; 

    void insert(int x){
        if(l.empty() || x <= l.top()){
            l.push(x);
            suml += x;
        }else{
            r.push(x);
            sumr += x;
        }
        if(l.size() > r.size() + 1){
            int val = l.top(); 
            l.pop();
            suml -= val;
            r.push(val);
            sumr += val;
        }else if(r.size() > l.size()){
            int val = r.top(); 
            r.pop();
            sumr -= val;
            l.push(val);
            suml += val;
        }
    }
    int cute(){
        int m = l.top();
        return (sumr - r.size() * m) + (l.size() * m - suml);
    }
} banhhe, behanh;

void solve() {
    int k, n; cin >> k >> n;

    vector<pair<int, int>> a;
    int res = 0;
    for(int i = 1; i <= n; i++){
        char p, q; int s, t;
        cin >> p >> s >> q >> t;
        if(p == q) res += abs(s - t); 
        else a.push_back({s, t});
    }
    res += a.size(); 
    if(a.empty()){
      cout << res;
      return;
    }
    sort(a.begin(), a.end(), [](pair<int, int> x, pair<int, int> y){
        return x.first + x.second < y.first + y.second;
    });

    vector<int> pre(a.size());
    for(int i = 0; i < a.size(); i++){
        banhhe.insert(a[i].first);
        banhhe.insert(a[i].second);
        pre[i] = banhhe.cute();
    }

    int ans = pre.back(); 
    if(k == 2){
        for(int i = a.size() - 1; i >= 1; i--){
            behanh.insert(a[i].first);
            behanh.insert(a[i].second);
            ans = min(ans, pre[i - 1] + behanh.cute());
        }
    }
    cout << ans + res;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
}
#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...