Submission #25506

#TimeUsernameProblemLanguageResultExecution timeMemory
25506gabrielsimoesPalembang Bridges (APIO15_bridge)C++14
100 / 100
103 ms10912 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pll; #define med q1.top() struct Median{ priority_queue<ll, vector<ll>, less<ll>> q1; priority_queue<ll, vector<ll>, greater<ll>> q2; ll sum1, sum2; Median() : sum1(0), sum2(0) {}; void insert(ll x) { if (!q1.empty() && x >= med) q2.push(x), sum2 += x; else q1.push(x), sum1 += x; if (q1.size() > q2.size()+1) { q2.push(q1.top()); sum2 += q1.top(); sum1 -= q1.top(); q1.pop(); } else if (q1.size() < q2.size()) { q1.push(q2.top()); sum1 += q2.top(); sum2 -= q2.top(); q2.pop(); } } ll get() { return med * ll(q1.size()) - sum1 + sum2 - med * q2.size(); } }; int main() { int M, N; scanf("%d %d", &M, &N); char a,c; ll b,d, ans0 = 0; vector<pll> v; for (int i = 0; i < N; i++) { scanf(" %c %lld %c %lld",&a, &b,&c, &d); if (d < b) swap(b,d); if (a == c) ans0 += d - b, N--, i--; else v.push_back(pll(b,d)), ans0++; } if (v.empty()) { printf("%lld\n", ans0); return 0; } if (M == 1) { vector<ll> all; for (pll p : v) all.push_back(p.first), all.push_back(p.second); sort(all.begin(), all.end()); ll x = all[all.size()/2 - 1]; for (ll y : all) ans0 += abs(y - x); printf("%lld\n", ans0); return 0; } else { sort(v.begin(), v.end(), [](pll a, pll b){return a.first+a.second<b.first+b.second;}); vector<ll> ans(N, ans0); Median *mm = new Median(); for (int i = 0; i < N; i++) { mm->insert(v[i].first); mm->insert(v[i].second); ans[i] += mm->get(); } mm = new Median(); for (int i = N-1; i > 0; i--) { mm->insert(v[i].first); mm->insert(v[i].second); ans[i-1] += mm->get(); } ll ans0 = ans[0]; for (int i = 1; i < N; i++) ans0 = min(ans0, ans[i]); printf("%lld\n", ans0); } }

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:41:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &M, &N);
                        ^
bridge.cpp:47:42: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c %lld %c %lld",&a, &b,&c, &d);
                                          ^
#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...