Submission #1322512

#TimeUsernameProblemLanguageResultExecution timeMemory
1322512kawhietPalembang Bridges (APIO15_bridge)C++20
22 / 100
61 ms7272 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...) 47
#endif

#define int long long

constexpr int inf = 1e18;

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int k, n;
    cin >> k >> n;
    vector<int> pos, l, r;
    vector<array<int, 2>> a;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        char p, q;
        int s, t;
        cin >> p >> s >> q >> t;
        if (s > t) swap(s, t);
        pos.push_back(s);
        pos.push_back(t);
        sum += t - s;
        if (p != q) {
            sum++;
            l.push_back(s);
            r.push_back(t);
            a.push_back({s, t});
        }
    }
    n = a.size();
    ranges::sort(l);
    ranges::sort(r);
    vector<int> p(n + 1), s(n + 1);
    for (int i = 0; i < n; i++) {
        p[i + 1] = p[i] + r[i];
    }
    for (int i = n - 1; i >= 0; i--) {
        s[i] = s[i + 1] + l[i];
    }
    ranges::sort(pos);
    pos.erase(unique(pos.begin(), pos.end()), pos.end());
    int ans = inf;
    for (auto x : pos) {
        int i = ranges::upper_bound(r, x) - r.begin();
        int j = ranges::lower_bound(l, x) - l.begin();
        int left = (i * x - p[i]) * 2;
        int right = (s[j] - (n - j) * x) * 2;
        ans = min(ans, sum + left + right);
    }
    cout << ans << '\n';
    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...