제출 #380820

#제출 시각아이디문제언어결과실행 시간메모리
380820LittlePantsPalembang Bridges (APIO15_bridge)C++17
100 / 100
134 ms10320 KiB
#include<bits/stdc++.h> #define pb push_back #define sz(x) (int)(x.size()) #define all(x) x.begin(), x.end() #define int long long #define pii pair<int, int> #define inf 1e9 #define mod 1000000007 #define F first #define S second #define mkp(x, y) make_pair(x, y) #define wopen(x) freopen((x),"w",stdout) #define ropen(x) freopen((x),"r",stdin) #define de(x) cout << #x << " = " << x << ' ' #define IO ios_base::sync_with_stdio(0); cin.tie(0); using namespace std; const int mxN = 1e6 + 5; int k, n, dis, su, sd, s[mxN], t[mxN], pre[mxN], suf[mxN]; char p[mxN], q[mxN]; priority_queue<int, vector<int>, greater<int>> up; priority_queue<int> dn; void keep() { while(sz(dn) == sz(up) and dn.top() > up.top()) { int t = up.top(); up.pop(); int tt = dn.top(); dn.pop(); su = su - t + tt; sd = sd - tt + t; up.push(tt); dn.push(t); } } void insert(int x, bool o) { if(o) { dn.push(x); sd += x; } else { up.push(x); su += x; } } void clear() { while(!up.empty()) up.pop(); while(!dn.empty()) dn.pop(); su = sd = 0; } int get_mid() { return dn.top(); } signed main() { IO; cin >> k >> n; vector<int> v; vector<pii> g; int ans = 0; for(int i = 0; i < n; i++) { cin >> p[i] >> s[i] >> q[i] >> t[i]; if(p[i] != q[i]) { v.pb(s[i]); v.pb(t[i]); g.pb({s[i] + t[i], i}); ans++; } else ans += abs(s[i] - t[i]); } if(k == 1) { sort(all(v)); if(sz(v) == 0) { cout << ans << '\n'; return 0; } int mid = v[(sz(v)) / 2]; for(int i = 0; i < sz(v); i++) ans += abs(v[i] - mid); cout << ans << '\n'; } else { sort(all(g)); dis = 0; for(int i = 0; i < sz(g); i++) { insert(s[g[i].S], 0); insert(t[g[i].S], 1); keep(); pre[i] = get_mid() * sz(dn) - sd + su - get_mid() * sz(up); } clear(); for(int i = sz(g) - 1; i >= 0; i--) { insert(s[g[i].S], 1); insert(t[g[i].S], 0); keep(); suf[i] = get_mid() * sz(dn) - sd + su - get_mid() * sz(up); } int mx = suf[0] + ans; for(int i = 0; i < sz(g); i++) mx = min(mx, ans + pre[i] + suf[i + 1]); cout << mx << '\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...