Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool cmp(array<ll, 3> a, array<ll, 3> b){
- return a[1] < b[1];
- }
- void solve(){
- ll D = in;
- int n = in;
- ll X = in;
- vector<array<ll, 3>> seeds;
- vector<ll> srt;
- for(int i = 0; i<n; i++){
- ll a = in, b = in, c = in;
- //amount
- //length
- //value
- seeds.pb({a, b, c});
- srt.pb(b);
- }
- srt.pb(D);
- sort(all(seeds), cmp);
- sort(all(srt));
- srt.resize(unique(all(srt)) - srt.begin());
- ll last = 0;
- priority_queue<pair<ll, ll>> pq; //value, amount
- int ptr = 0;
- ll ans = 0;
- for(ll x : srt){
- ll tim = x - last;
- ll poss = tim * X;
- while(poss > 0 && sz(pq)){
- auto [v, c] = pq.top(); pq.pop();
- ll delta = min(c, poss);
- poss -= delta;
- c -= delta;
- ans += v * delta;
- cerr << delta << " " << v << "\n";
- if(c){
- pq.push(mp(v, c));
- }
- }
- last = x;
- while(ptr < sz(seeds) && seeds[ptr][1] <= x){
- pq.push(mp(seeds[ptr][2], seeds[ptr][0]));
- ptr++;
- }
- }
- cout << ans << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment