제출 #606294

#제출 시각아이디문제언어결과실행 시간메모리
606294stevancvPalembang Bridges (APIO15_bridge)C++14
100 / 100
96 ms8768 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 1e5 + 2; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int k, n; cin >> k >> n; ll ans = 0; vector<array<ll, 2>> a; for (int i = 0; i < n; i++) { char pp, qq; ll x, y; cin >> pp >> x >> qq >> y; if (x > y) swap(x, y); if (pp == qq) ans += y - x; else a.push_back({x, y}), ans++; } sort(a.begin(), a.end(), [&] (array<ll, 2> i, array<ll, 2> j) { return i[0] + i[1] < j[0] + j[1]; }); n = a.size(); if (n == 0) { cout << ans << en; return 0; } ll d = 0; priority_queue<ll> p, q; vector<ll> pref(n), suff(n); for (int i = 0; i < n; i++) { p.push(a[i][0]); d -= a[i][0]; q.push(-a[i][1]); d += a[i][1]; if (p.top() > -q.top()) { d += 2 * (p.top() + q.top()); ll xx = p.top(); ll yy = q.top(); p.pop(); q.pop(); p.push(-yy); q.push(-xx); } pref[i] = d; } d = 0; while (!p.empty()) p.pop(); while (!q.empty()) q.pop(); for (int i = n - 1; i >= 0; i--) { p.push(a[i][0]); d -= a[i][0]; q.push(-a[i][1]); d += a[i][1]; if (p.top() > -q.top()) { d += 2 * (p.top() + q.top()); ll xx = p.top(); ll yy = q.top(); p.pop(); q.pop(); p.push(-yy); q.push(-xx); } suff[i] = d; } if (k == 1) { cout << ans + suff[0] << en; return 0; } ll ad = suff[0]; for (int i = 0; i < n - 1; i++) smin(ad, pref[i] + suff[i + 1]); cout << ans + ad << en; 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...