Submission #831801

#TimeUsernameProblemLanguageResultExecution timeMemory
831801serifefedartarPalembang Bridges (APIO15_bridge)C++17
100 / 100
250 ms12704 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); typedef long long ll; #define f first #define s second #define MOD 1000000007 #define LOGN 18 #define MAXN 200005 vector<pair<ll,ll>> seq; int main() { fast ll K, N; cin >> K >> N; ll sum = 0; for (int i = 0; i < N; i++) { char ch1, ch2; ll posR1, posR2; cin >> ch1 >> posR1 >> ch2 >> posR2; if (ch1 == ch2) sum += abs(posR1 - posR2); else seq.push_back({min(posR1, posR2), max(posR1, posR2)}); } sort(seq.begin(), seq.end(), [&](pair<ll,ll> &a, pair<ll,ll> &b) { return a.f + a.s < b.f + b.s; }); sum += seq.size(); int n = seq.size(); if (seq.size() == 0) { cout << sum << "\n"; return 0; } ll ans = 1e15; vector<ll> pref(n+1, 0); multiset<int> s1, s2; ll sum1 = 0, sum2 = 0; for (int i = 0; i < n; i++) { s1.insert(seq[i].f); s2.insert(seq[i].s); sum1 += seq[i].f; sum2 += seq[i].s; while (*(s2.begin()) < *(--s1.end())) { s1.insert(*s2.begin()); sum1 += *s2.begin(); sum2 -= *s2.begin(); s2.erase(s2.begin()); s2.insert(*(--s1.end())); sum1 -= *(--s1.end()); sum2 += *(--s1.end()); s1.erase(s1.find(*(--s1.end()))); } pref[i] = sum2 - sum1; } ans = pref[n-1]; s1 = multiset<int>(); s2 = multiset<int>(); sum1 = sum2 = 0; if (K == 2) { for (int i = n-1; i >= 1; i--) { s1.insert(seq[i].f); s2.insert(seq[i].s); sum1 += seq[i].f; sum2 += seq[i].s; while (*(s2.begin()) < *(--s1.end())) { s1.insert(*s2.begin()); sum1 += *s2.begin(); sum2 -= *s2.begin(); s2.erase(s2.begin()); s2.insert(*(--s1.end())); sum1 -= *(--s1.end()); sum2 += *(--s1.end()); s1.erase(s1.find(*(--s1.end()))); } ll now = sum2 - sum1; ans = min(ans, now + pref[i-1]); } } cout << sum + ans << "\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...