Submission #1343933

#TimeUsernameProblemLanguageResultExecution timeMemory
1343933ZeroPalembang Bridges (APIO15_bridge)C++20
100 / 100
68 ms6112 KiB

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define ff first
#define ss second
#define pi pair<int,int>

priority_queue<int> lpq;
priority_queue<int,vector<int>,greater<>> rpq;
int ls = 0, rs = 0;

bool cp(pi a, pi b){
    return a.ff + a.ss < b.ff + b.ss;
}

void insert(int x){
    int med = (lpq.size() ? lpq.top() : 1000000001);
    if(x <= med){
        lpq.push(x);
        ls += x;
    }
    else{
        rpq.push(x);
        rs += x;
    }

    if(lpq.size() < rpq.size()){
        int nx = rpq.top();
        rpq.pop();
        rs -= nx;
        ls += nx;
        lpq.push(nx);
    }
    else if(rpq.size() + 1 < lpq.size()){
        int nx = lpq.top();
        lpq.pop();
        ls -= nx;
        rs += nx;
        rpq.push(nx);
    }
}

signed main(){
    cin.tie(0)->sync_with_stdio(0);
    
    int k, n; cin >> k >> n;

    int s = 0, same = 0;
    vector<pi> v;

    for(int i=0;  i< n; i ++){
        char q,w; int e, r; cin >> q >> e >> w >> r;
        if(q == w){
            same += abs(r-e);
        }
        else{
            v.pb({e,r});
        }
    }
    sort(v.begin(),v.end(), cp);
    n = v.size();
    same += n;
    
    vector<int> pr(n+1,0);
    for(int i=0; i < n; i ++){
        insert(v[i].ff);
        insert(v[i].ss);
        pr[i+1] = (rs - ls);
    }

    int ans = pr[n];

    if(k == 2){
        while(lpq.size()) lpq.pop();
        while(rpq.size()) rpq.pop();
        ls = rs = 0;

        for(int i=n-1; i >= 0; i --){
            insert(v[i].ff);
            insert(v[i].ss);
            ans = min(ans, rs - ls + pr[i]);
        }

    }

    cout << same + ans;





}

/*

0 4
1 7
2 6
5 7

lpq : 4 2 1 0
rpq : 5 6 7 7
pref: 4

*/
#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...