Submission #1089089

#TimeUsernameProblemLanguageResultExecution timeMemory
1089089kh0iPalembang Bridges (APIO15_bridge)C++17
100 / 100
209 ms15300 KiB
#include "bits/stdc++.h" using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) #endif using ll = long long; using pii = pair<int, int>; #define F first #define S second #define sz(x) (int)((x).size()) #define all(x) (x).begin(), (x).end() mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll get_rand(ll l, ll r) { assert(l <= r); return uniform_int_distribution<ll> (l, r)(rng); } int k, n; vector<pair<ll, ll>> a; ll res; namespace Sub1{ void solve(){ vector<ll> x; for(auto [s, t] : a){ x.push_back(s); x.push_back(t); } sort(all(x)); ll pos = x[sz(x) / 2]; for(ll k : x) res += abs(k - pos); cout << res + sz(a); } } struct SlidingMedian{ multiset<ll> fi, se; ll sum_fi = 0, sum_se = 0; void add(ll x){ se.insert(x); sum_se += x; while(sz(fi) < sz(se)){ ll d = *se.begin(); sum_se -= d; sum_fi += d; fi.insert(d); se.erase(se.begin()); } while(sz(fi) > sz(se)){ ll d = *fi.rbegin(); sum_fi -= d; sum_se += d; se.insert(d); fi.erase(fi.find(d)); } } ll get_sum(){ ll med = *se.begin(); return (1ll * sz(fi) * med - sum_fi) + (sum_se - 1ll * sz(se) * med); } void reset(){ fi.clear(); se.clear(); sum_fi = sum_se = 0; } }; namespace Sub2{ void solve(){ if(sz(a) == 0){ cout << res; return; } sort(all(a), [](pair<ll, ll> &f, pair<ll, ll> &g) -> bool{ return f.F + f.S < g.F + g.S; }); vector<ll> pre(sz(a)), suf(sz(a)); SlidingMedian st; for(int i = 0; i < sz(a); ++i){ st.add(a[i].F); st.add(a[i].S); pre[i] = st.get_sum(); } st.reset(); for(int i = sz(a) - 1; i >= 0; --i){ st.add(a[i].F); st.add(a[i].S); suf[i] = st.get_sum(); } ll mn = suf[0]; for(int i = 0; i < sz(a) - 1; ++i) mn = min(mn, pre[i] + suf[i + 1]); cout << res + mn + sz(a); } } void solve(){ cin >> k >> n; for(int i = 1; i <= n; ++i){ char p, q; int s, t; cin >> p >> s >> q >> t; if(p == q) res += abs(s - t); else{ if(s > t) swap(s, t); a.push_back({s, t}); } } if(k == 1) Sub1::solve(); else Sub2::solve(); } int32_t main() { cin.tie(nullptr)->sync_with_stdio(0); #define task "troll" if(fopen(task".inp", "r")){ freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } int test = 1; // cin >> test; for(int i = 1; i <= test; ++i){ // cout << "Case #" << i << ": "; solve(); } #ifdef LOCAL cerr << "\n[Time]: " << 1000.0 * clock() / CLOCKS_PER_SEC << " ms.\n"; #endif return 0; }

Compilation message (stderr)

bridge.cpp: In function 'int32_t main()':
bridge.cpp:138:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  138 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bridge.cpp:139:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  139 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...