Submission #389004

#TimeUsernameProblemLanguageResultExecution timeMemory
389004talant117408Palembang Bridges (APIO15_bridge)C++17
100 / 100
120 ms7564 KiB
/* Code written by Talant I.D. */ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <int, int> pii; typedef pair <ll, ll> pll; #define precision(n) fixed << setprecision(n) #define pb push_back #define ub upper_bound #define lb lower_bound #define mp make_pair #define eps (double)1e-9 #define PI 2*acos(0.0) #define endl "\n" #define sz(v) int((v).size()) #define all(v) v.begin(),v.end() #define rall(v) v.rbegin(),v.rend() #define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define OK cout << "OK" << endl; const int mod = 998244353; ll mode(ll a) { a %= mod; if (a < 0) a += mod; return a; } ll subt(ll a, ll b) { return mode(mode(a)-mode(b)); } ll add(ll a, ll b) { return mode(mode(a)+mode(b)); } ll mult(ll a, ll b) { return mode(mode(a)*mode(b)); } ll binpow(ll a, ll b) { ll res = 1; while (b) { if (b&1) res = mult(res, a); a = mult(a, a); b >>= 1; } return res; } struct citizen { ll l, r; bool operator <(const citizen &other) { return l+r < other.l+other.r; } }; struct Heaps { ll lsum, rsum; priority_queue <ll> L; priority_queue <ll, vector <ll>, greater <ll>> R; void init() { lsum = rsum = 0; while (!L.empty()) L.pop(); while (!R.empty()) R.pop(); L.push(-1e18); R.push(1e18); } void insert(citizen a) { L.push(a.l); lsum += a.l; R.push(a.r); rsum += a.r; while (L.top() > R.top()) { int l = L.top(); int r = R.top(); L.pop(); lsum -= l; R.pop(); rsum -= r; L.push(r); lsum += r; R.push(l); rsum += l; } } ll calc() { return rsum-lsum; } } heaps; const int N = 1e5+7; citizen v[N]; ll pref[N], suff[N]; int main() { do_not_disturb int k, n; cin >> k >> n; ll sum = 0; for (int i = 1; i <= n; i++) { char a, b; cin >> a >> v[i].l >> b >> v[i].r; if (a == b) { sum += abs(v[i].l-v[i].r); i--; n--; } else { sum++; } } sort(v+1, v+1+n); heaps.init(); for (int i = 1; i <= n; i++) { heaps.insert(v[i]); pref[i] = heaps.calc(); } heaps.init(); for (int i = n; i >= 1; i--) { heaps.insert(v[i]); suff[i] = heaps.calc(); } if (k == 1) { cout << sum+pref[n]; } else { ll res = 9e18; for (int i = 0; i <= n; i++) { res = min(res, pref[i]+suff[i+1]); } cout << res+sum; } 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...