Submission #937841

#TimeUsernameProblemLanguageResultExecution timeMemory
937841duckindogPalembang Bridges (APIO15_bridge)C++17
100 / 100
64 ms6292 KiB
#include<bits/stdc++.h> using namespace std; const int N = 100'000 + 10; int k, n; pair<int, int> a[N]; long long sum = 0; priority_queue<int> lt; priority_queue<int, vector<int>, greater<>> rt; void rearrange() { if (lt.top() <= rt.top()) return; int x = lt.top(), y = rt.top(); lt.pop(), rt.pop(); sum += 2 * x - 2 * y; lt.push(y); rt.push(x); } void clr() { sum = 0; priority_queue<int> x; priority_queue<int, vector<int>, greater<>> y; swap(lt, x); swap(rt, y); } long long l[N], r[N]; int32_t main() { cin.tie(0)->sync_with_stdio(0); cin >> k >> n; long long add = 0; for (int i = 1; i <= n; ++i) { char A, B; cin >> A >> a[i].first >> B >> a[i].second; if (A != B) continue; add += abs(a[i].first - a[i].second); i -= 1; n -= 1; } sort(a + 1, a + n + 1, [&](const auto& a, const auto& b) { return a.first + a.second < b.first + b.second; }); for (int i = 1; i <= n; ++i) { int x, y; tie(x, y) = a[i]; lt.push(x); rt.push(y); sum += y - x; rearrange(); l[i] = sum; } if (k == 1) { cout << l[n] + add + n; return 0; } clr(); for (int i = n; i >= 1; --i) { int x, y; tie(x, y) = a[i]; lt.push(x); rt.push(y); sum += y - x; rearrange(); r[i] = sum; } long long answer = l[n]; for (int i = 2; i <= n; ++i) answer = min(answer, r[i] + l[i - 1]); cout << answer + add + n << "\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...