Submission #624960

#TimeUsernameProblemLanguageResultExecution timeMemory
624960KoDPalembang Bridges (APIO15_bridge)C++17
100 / 100
109 ms8724 KiB
#include <bits/stdc++.h> using ll = long long; using std::vector; template <class T> constexpr T inf = std::numeric_limits<T>::max() / 2; class slope_trick { std::priority_queue<int> left; std::priority_queue<int, vector<int>, std::greater<>> right; ll min; public: slope_trick() : left(), right(), min(0) {} void add(const int x) { if (!left.empty() and x < left.top()) { min += left.top() - x; left.push(x); right.push(left.top()); left.pop(); } else { right.push(x); } if (!right.empty() and x > right.top()) { min += x - right.top(); right.push(x); left.push(right.top()); right.pop(); } else { left.push(x); } } ll minimum() const { return min; } }; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int K, N; std::cin >> K >> N; vector<int> S, T; ll must = 0; while (N--) { char p, q; int a, b; std::cin >> p >> a >> q >> b; if (p == q) { must += std::abs(a - b); } else { must += 1; S.push_back(a); T.push_back(b); } } N = (int)S.size(); vector<int> ord(N); std::iota(ord.begin(), ord.end(), 0); std::sort(ord.begin(), ord.end(), [&](const int i, const int j) { return S[i] + T[i] < S[j] + T[j]; }); vector<ll> pref(N + 1), suff(N + 1); slope_trick slope; for (int i = 0; i < N; ++i) { const int k = ord[i]; slope.add(S[k]); slope.add(T[k]); pref[i + 1] = slope.minimum(); } slope = slope_trick(); for (int i = N - 1; i >= 0; --i) { const int k = ord[i]; slope.add(S[k]); slope.add(T[k]); suff[i] = slope.minimum(); } if (K == 1) { std::cout << must + pref[N] << '\n'; } else { ll min = inf<ll>; for (int i = 0; i <= N; ++i) { min = std::min(min, pref[i] + suff[i]); } std::cout << must + min << '\n'; } }
#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...