Submission #1109543

#TimeUsernameProblemLanguageResultExecution timeMemory
1109543ntkkdlPalembang Bridges (APIO15_bridge)C++17
100 / 100
79 ms5720 KiB
#include <bits/stdc++.h>
#define FOR(i, x, y) for (int i = x; i < y; i++)
typedef long long ll;
using namespace std;
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() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int k, n;
    ll ss = 0;
    vector<pair<int, int>> v = {{0, 0}};
    cin >> k >> n;
    FOR(i, 0, n) {
        char a, b;
        int x, y;
        cin >> a >> x >> b >> y;
        if (a == b) ss += abs(x - y);
        else v.push_back({x, y});
    }
	sort(v.begin(), v.end(), cmp);
    n = v.size() - 1;
    ss += n;
    lsum = rsum = 0;
    FOR(i, 1, n + 1) {
        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 << ss + 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...