Advertisement
pb_jiang

ABC330F AC but long code

Nov 27th, 2023
921
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #ifndef __DEBUG__
  5. #define dbg(...) 42
  6. #endif
  7. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  8.  
  9. using ll = long long;
  10. using pii = pair<int, int>;
  11. using pll = pair<ll, ll>;
  12. using vl = vector<ll>;
  13. using vi = vector<int>;
  14.  
  15. int main(int argc, char **argv)
  16. {
  17.     ll n, k;
  18.     cin >> n >> k;
  19.     vl xs(n), ys(n), xacc(n + 2), yacc(n + 2);
  20.     for (int i = 0; i < n; ++i)
  21.         cin >> xs[i] >> ys[i];
  22.  
  23.     sort(xs.begin(), xs.end()), sort(ys.begin(), ys.end());
  24.     for (int i = 0; i < n; ++i)
  25.         xacc[i + 1] = xacc[i] + xs[i], yacc[i + 1] = yacc[i] + ys[i];
  26.  
  27.     auto find_k = [](ll d, const vl &as, const vl &acc) {
  28.         ll ans = LLONG_MAX, n = as.size();
  29.         for (ll i = 0, j = 0; i < n; ++i) {
  30.             while (j < i && as[i] - as[j] > d)
  31.                 ++j;
  32.             ll cost = (acc[n] - acc[i + 1]) - (n - i - 1) * as[i];
  33.             cost += max(0ll, j * (as[i] - d) - acc[j]);
  34.             ans = min(ans, cost);
  35.         }
  36.         for (ll i = 0, j = 0; i < n; ++i) {
  37.             while (j < n && as[j] - as[i] <= d)
  38.                 ++j;
  39.             ll cost = i * as[i] - acc[i];
  40.             cost += acc[n] - acc[j] - (n - j) * (as[i] + d);
  41.             ans = min(ans, cost);
  42.         }
  43.         return ans;
  44.     };
  45.     ll lb = -1, ub = 2e9;
  46.     while (lb + 1 < ub) {
  47.         ll mid = (lb + ub) / 2;
  48.         ll fx = find_k(mid, xs, xacc), fy = find_k(mid, ys, yacc);
  49.         // dbg(k, mid, fx, fy);
  50.         (fx + fy > k ? lb : ub) = mid;
  51.     }
  52.     cout << ub << endl;
  53.     return 0;
  54. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement