tuki2501

music.cpp

Oct 25th, 2021 (edited)
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. int main() {
  7.   int n; cin >> n;
  8.   vector<pair<ll,ll>> pl, pr;
  9.   for (int i = 0; i < n; i++) {
  10.     ll p, t, d;
  11.     cin >> p >> t >> d;
  12.     pl.push_back({p - d - 1, t});
  13.     pl.push_back({p - d    , 0});
  14.     pl.push_back({p + d    , 0});
  15.     pl.push_back({p + d + 1, 0});
  16.     pr.push_back({p - d - 1, 0});
  17.     pr.push_back({p - d    , 0});
  18.     pr.push_back({p + d    , 0});
  19.     pr.push_back({p + d + 1, t});
  20.   }
  21.   sort(pl.begin(), pl.end());
  22.   sort(pr.begin(), pr.end());
  23.   vector<pair<ll,ll>> l, r;
  24.   for (int i = 0; i < n * 4; i++) {
  25.     if (!l.size() || l.back().first != pl[i].first) {
  26.       l.push_back(pl[i]);
  27.     }
  28.     else {
  29.       l.back().second += pl[i].second;
  30.     }
  31.     if (!r.size() || r.back().first != pr[i].first) {
  32.       r.push_back(pr[i]);
  33.     }
  34.     else {
  35.       r.back().second += pr[i].second;
  36.     }
  37.   }
  38.   ll cnt = 0;
  39.   for (int i = (int) l.size() - 1; i >= 0; i--) {
  40.     ll t = l[i].second;
  41.     if (i + 1 < (int) l.size()) {
  42.       l[i].second += l[i + 1].second;
  43.       l[i].second += cnt * (l[i + 1].first - l[i].first);
  44.     }
  45.     cnt += t;
  46.   }
  47.   cnt = 0;
  48.   for (int i = 0; i < (int) r.size(); i++) {
  49.     ll t = r[i].second;
  50.     if (i - 1 >= 0) {
  51.       r[i].second += r[i - 1].second;
  52.       r[i].second += cnt * (r[i].first - r[i - 1].first);
  53.     }
  54.     cnt += t;
  55.   }
  56.   ll ans = 1e18;
  57.   for (int i = 0; i < (int) l.size(); i++) {
  58.     ans = min(ans, l[i].second + r[i].second);
  59.   }
  60.   cout << ans << '\n';
  61. }
Add Comment
Please, Sign In to add comment