Submission #643127

#TimeUsernameProblemLanguageResultExecution timeMemory
643127minasePalembang Bridges (APIO15_bridge)C++17
100 / 100
92 ms5652 KiB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;

priority_queue<int> lpq;
priority_queue<int, vector<int>, greater<int>> rpq;
i64 lsum, rsum;

bool cmp(pair<int, int> a, pair<int, int> b) {
  return a.first + a.second < b.first + b.second;
}

void insert(int x) {
  int median = (lpq.size() ? lpq.top() : 1000000001);
  if (x <= median) {
    lpq.push(x);
    lsum += x;
  } else {
    rpq.push(x);
    rsum += x;
  }

  if (rpq.size() + 1 < lpq.size()) {
    int nxt = lpq.top();
    lpq.pop();
    rpq.push(nxt);
    lsum -= nxt;
    rsum += nxt;
  } else if (lpq.size() < rpq.size()) {
    int nxt = rpq.top();
    rpq.pop();
    lpq.push(nxt);
    rsum -= nxt;
    lsum += nxt;
  }
}

i64 pref[100001];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int k, n;
  i64 same_side = 0;
  vector<pair<int, int>> v = {{0, 0}};
  cin >> k >> n;
  for (int i = 0; i < n; i++) {
    char a, b;
    int x, y;
    cin >> a >> x >> b >> y;
    if (a == b)
      same_side += abs(x - y);
    else
      v.push_back({x, y});
  }
  sort(v.begin(), v.end(), cmp);
  n = v.size() - 1;
  same_side += n;

  lsum = rsum = 0;
  for (int i = 1; i <= n; i++) {
    insert(v[i].first);
    insert(v[i].second);
    pref[i] = rsum - lsum;
  }

  i64 ans = pref[n];

  if (k == 2) {
    while (lpq.size())
      lpq.pop();
    while (rpq.size())
      rpq.pop();
    lsum = rsum = 0;

    for (int i = n; i > 0; i--) {
      insert(v[i].first);
      insert(v[i].second);
      ans = min(ans, rsum - lsum + pref[i - 1]);
    }
  }
  cout << same_side + ans;
  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...