제출 #1344153

#제출 시각아이디문제언어결과실행 시간메모리
1344153orgiloogiiPalembang Bridges (APIO15_bridge)C++20
22 / 100
46 ms6488 KiB
#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
using namespace std;
int ls = 0,rs = 0;
priority_queue <int> lst;
priority_queue <int, vector <int>, greater<int>> rst;
void push(int x) {
    int mid;
    if (!lst.empty()) {
        mid = lst.top();
    }
    else {
        mid = 1e18;
    }
    if (x <= mid) {
        lst.push(x);
        ls += x;
    }
    else {
        rst.push(x);
        rs += x;
    }
    if (rst.size() + 1 < lst.size()) {
        int rem = lst.top();
        lst.pop();
        rst.push(rem);
        ls -= rem;
        rs += rem;
    }
    else if (rst.size() > lst.size()) {
        int rem = rst.top();
        rst.pop();
        lst.push(rem);
        rs -= rem;
        ls += rem;
    }
}
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    int k, n;
    cin >> k >> n;
    vector <array <int, 3>> v;
    int ans = 0;
    for (int i = 0;i < n;i++) {
        char a, c;
        int b, d;
        cin >> a >> b >> c >> d;
        if (a == c) {
            ans += abs(d - b);
        }
        else {
            ans++;
            v.push_back({b + d, b, d});
        }
    }
    sort(v.begin(), v.end());
    int pref[v.size() + 1] = {0};
    for (int i = 0;i < v.size();i++) {
        push(v[i][1]);
        push(v[i][2]);
        pref[i + 1] = rs - ls;
    }
    // for (int i = 1;i <= n;i++) {
    //     cout << pref[i] << ' ';
    // }
    if (k == 2) {
        priority_queue <int> emp;
        priority_queue <int, vector <int>, greater<int>> emp1;
        lst.swap(emp);
        rst.swap(emp1);
        ls = 0;
        rs = 0;
        int temp = pref[n];
        for (int i = v.size() - 1;i >= 0;i--) {
            push(v[i][1]);
            push(v[i][2]);
            temp = min(temp, rs - ls + pref[i]);
        }
        cout << ans + temp << endl;
        return 0;
    }
    else {
        cout << ans + pref[v.size()] << endl;
        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...