Submission #1057713

#TimeUsernameProblemLanguageResultExecution timeMemory
1057713juicyArranging Tickets (JOI17_arranging_tickets)C++17
100 / 100
46 ms4144 KiB
// https://www.luogu.com.cn/article/lqa8q1lu
// https://oj.uz/submission/684837

#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif

int main() {
  ios::sync_with_stdio(false); cin.tie(nullptr);

  int n, m; cin >> n >> m;
  vector<long long> a(n);
  vector<array<int, 3>> cands(m);
  for (int i = 0; i < m; ++i) {
    int l, r, c; cin >> l >> r >> c;
    if (l > r) {
      swap(l, r);
    }
    --l, --r;
    a[l] += c;
    a[r] -= c;
    cands[i] = {l, r, c};
  } 
  for (int i = 1; i <= n; ++i) {
    a[i] += a[i - 1];
  }
  auto qry = [&](int k) {
    fill(a.begin(), a.end(), 0);
    priority_queue<array<int, 2>> pq;
    long long res = 0;
    for (int i = 0, j = 0; i < n; ++i) {
      while (j < m && cands[j][0] == i) {
        auto [l, r, c] = cands[j++];
        a[l] += c;
        a[r] -= c;
        pq.push({r, c});
      }
      if (i) {
        a[i] += a[i - 1];
      }
      while (a[i] > k) {
        auto [r, c] = pq.top(); pq.pop();
        long long x = min((long long) c, (a[i] - k + 1) / 2);
        c -= x;
        a[i] -= 2 * x;
        a[r] += 2 * x;
        res += x;
        if (c) {
          pq.push({r, c});
        }
      }
    } 
    return res + k;
  };
  int p = max_element(a.begin(), a.end()) - a.begin();
  for (int i = 0; i < m; ++i) {
    auto &[l, r, c] = cands[i];
    l = (l - p - 1 + n) % n;
    r = (r - p - 1 + n) % n;
    if (l > r) {
      swap(l, r);
    }
  }
  sort(cands.begin(), cands.end());
  cout << min(qry(0), qry(1));
  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...