Submission #170604

#TimeUsernameProblemLanguageResultExecution timeMemory
170604VEGAnnPalembang Bridges (APIO15_bridge)C++14
63 / 100
380 ms7640 KiB
#include <bits/stdc++.h> #define all(x) x.begin(),x.end() #define pii pair<int, int> #define ft first #define sd second #define MP make_pair #define PB push_back #define sz(x) ((int)x.size()) using namespace std; typedef long long ll; const ll PW = 43; const int N = 10010; const int B = 100; const int oo = 2e9; const ll OO = 1e18; vector<pii> seg, sem; vector<int> pts, segl, segr; ll extra = 0, best = OO, kl = 0, kr = 0, sl = 0, sr = 0, lft[N], rgt[N], chkl[N], chsm[N], dob[N]; int k, n, siz; bool cmp(pii _x, pii _y){ return _x.sd < _y.sd; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen("in.txt","r",stdin); cin >> k >> n; for (int i = 0; i < n; i++){ char c1, c2; int l, r; cin >> c1 >> l >> c2 >> r; if (l > r) swap(l, r); extra += r - l; if (c1 != c2){ extra++; segl.PB(l); segr.PB(r); seg.PB(MP(l, r)); pts.PB(l); pts.PB(r); } } sort(all(pts)); pts.resize(unique(all(pts)) - pts.begin()); sort(all(segl)); sort(all(segr)); siz = sz(segr); if (k == 2){ for (int i = 0; i < siz; i++){ kl++; sl += segl[i]; } for (int i = 0; i < sz(pts); i++){ int x = pts[i]; while (kl > 0 && segl[siz - kl] <= x){ sl -= segl[siz - kl]; kl--; } lft[i] = sl - (ll(x) * kl); while (kr < siz && segr[kr] < x){ sr += segr[kr]; kr++; } rgt[i] = (ll(x) * kr) - sr; } for (int i1 = 0; i1 < sz(pts); i1++){ int x = pts[i1]; sem.clear(); for (pii cr : seg) if (cr.ft > x) sem.PB(cr); sort(all(sem), cmp); int it = 0; ll add = 0, kol = 0, sum = 0; for (int i2 = i1; i2 < sz(pts); i2++){ int y = pts[i2]; ll cur = lft[i2] + rgt[i1]; while (it < sz(sem) && sem[it].sd < y){ pii se = sem[it]; if (se.ft - x < y - se.sd){ add += se.ft - x; } else { kol++; sum += se.sd; if (se.ft - x < pts.back() - se.sd){ int ll = i2, rr = sz(pts) - 1; while (ll < rr){ int md = (ll + rr) >> 1; if (se.ft - x < pts[md] - se.sd) rr = md; else ll = md + 1; } dob[ll] += se.ft - x; chkl[ll]++; chsm[ll] += se.sd; } } it++; } add += dob[i2]; sum -= chsm[i2]; kol -= chkl[i2]; dob[i2] = chsm[i2] = chkl[i2] = 0; cur += add + (kol * ll(y)) - sum; best = min(best, cur + cur); } } if (best == OO) best = 0; cout << best + extra; return 0; } for (int i = 0; i < siz; i++){ kl++; sl += segl[i]; } for (int x : pts){ while (kl > 0 && segl[siz - kl] <= x){ sl -= segl[siz - kl]; kl--; } while (kr < siz && segr[kr] < x){ sr += segr[kr]; kr++; } ll cur = sl - (ll(x) * kl) + (ll(x) * kr) - sr; best = min(best, cur + cur); } if (best == OO) best = 0; cout << best + extra; 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...