Submission #241436

#TimeUsernameProblemLanguageResultExecution timeMemory
241436NightlightPalembang Bridges (APIO15_bridge)C++14
100 / 100
125 ms6124 KiB
#include <bits/stdc++.h> #define pii pair<int, int> using namespace std; int K, N; pii seg[100005];int p; long long dpL[100005];//kalau prefix jadi 1 bagian long long dpR[100005];//kalau suffix jadi 1 bagian priority_queue<int, vector<int>, greater<int>> mn;long long sum_mn; priority_queue<int, vector<int>> mx;long long sum_mx; long long tot; long long ans; bool comp(pii A, pii B) { return A.first + A.second < B.first + B.second; } void clean() { while(!mn.empty()) { // cout << mn.top() << "\n"; mn.pop(); } while(!mx.empty()) { // cout << mx.top() << "\n"; mx.pop(); } sum_mn = 0; sum_mx = 0; tot = 0; } long long balance() { while(mn.size() > tot / 2) { int now = mn.top(); mn.pop(); sum_mn -= now; mx.emplace(now); sum_mx += now; } while(mx.size() > tot / 2) { int now = mx.top(); mx.pop(); sum_mx -= now; mn.emplace(now); sum_mn += now; } while(mn.top() < mx.top()) { int sm = mn.top(), bg = mx.top(); mn.pop(), mx.pop(); mn.emplace(bg); mx.emplace(sm); sum_mn += bg - sm; sum_mx += sm - bg; } // cout << sum_mn << " " << sum_mx << "\n"; return sum_mn - sum_mx; } long long adds(int idx) { mn.emplace(seg[idx].first); mn.emplace(seg[idx].second); sum_mn += seg[idx].first + seg[idx].second; tot += 2; return balance(); } void solve() { for(int i = 1; i <= p; i++) { dpL[i] = adds(i); } if(K == 1) { printf("%lld\n", dpL[p] + ans + tot / 2); return; } clean(); long long res = dpL[p]; for(int i = p; i > 0; i--) { dpR[i] = adds(i); res = min(res, dpL[i - 1] + dpR[i]); } printf("%lld\n", res + ans + tot / 2); } int main() { ios_base::sync_with_stdio(0); cin >> K >> N; int S, E;char a, b; for(int i = 1; i <= N; i++) { cin >> a >> S >> b >> E; if(a == b) { ans += abs(S - E); }else { seg[++p] = make_pair(S, E); } } sort(seg + 1, seg + p + 1, comp); // for(int i = 1; i <= p; i++) cout << seg[i].first << " " << seg[i].second << " "; cout << "\n"; solve(); cin >> N; }

Compilation message (stderr)

bridge.cpp: In function 'long long int balance()':
bridge.cpp:33:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(mn.size() > tot / 2) {
         ~~~~~~~~~~^~~~~~~~~
bridge.cpp:40:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(mx.size() > tot / 2) {
         ~~~~~~~~~~^~~~~~~~~
#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...