willy108

kickstart C

Sep 18th, 2022
640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. bool cmp(array<ll, 3> a, array<ll, 3> b){
  2.     return a[1] < b[1];
  3. }
  4.  
  5. void solve(){
  6.     ll D = in;
  7.     int n = in;
  8.     ll X = in;
  9.     vector<array<ll, 3>> seeds;
  10.     vector<ll> srt;
  11.     for(int i = 0; i<n; i++){
  12.         ll a = in, b = in, c = in;
  13.         //amount
  14.         //length
  15.         //value
  16.         seeds.pb({a, b, c});
  17.         srt.pb(b);
  18.     }
  19.     srt.pb(D);
  20.     sort(all(seeds), cmp);
  21.     sort(all(srt));
  22.     srt.resize(unique(all(srt)) - srt.begin());
  23.     ll last = 0;
  24.     priority_queue<pair<ll, ll>> pq; //value, amount
  25.     int ptr = 0;
  26.     ll ans = 0;
  27.     for(ll x : srt){
  28.         ll tim = x - last;
  29.         ll poss = tim * X;
  30.         while(poss > 0 && sz(pq)){
  31.             auto [v, c] = pq.top(); pq.pop();
  32.             ll delta = min(c, poss);
  33.             poss -= delta;
  34.             c -= delta;
  35.             ans += v * delta;
  36.             cerr << delta << " " << v << "\n";
  37.             if(c){
  38.                 pq.push(mp(v, c));
  39.             }
  40.         }
  41.         last = x;
  42.         while(ptr < sz(seeds) && seeds[ptr][1] <= x){
  43.             pq.push(mp(seeds[ptr][2], seeds[ptr][0]));
  44.             ptr++;
  45.         }
  46.     }
  47.     cout << ans << "\n";
  48. }
Advertisement
Add Comment
Please, Sign In to add comment