link:https://zerojudge.tw/ShowProblem?problemid=g597
### 想法
1. 題目要求最少時間做完,因此我們應該要讓做最快的機器處理最多單位的工作
2. 因此,我們在讀輸入時,就應該將指定區間 ( 題目給定 $l$ ~ $r$ )加上單位數 ( $w$ )。此外,由於牽涉到多次的區間加減,使用 **差分數組** 的方法來加速。
3. 最後將生產總單位數的 vector 由大到小排序;機器則按照生產時間由小到大排序,即可得到答案。
```C++=
#include <bits/stdc++.h>
using namespace std;
bool cmp(long long int &a, long long int &b) {
return a > b;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n,m;
int l,r,w;
cin>>n>>m;
vector<long long int> works_diff(n,0); //可以用差分數組來寫區間和
vector<long long int> works(n,0);
vector<long long int> times(n);
for (int i=0;i<m;i++){
cin>>l>>r>>w;
works_diff[l-1]+=w;
works_diff[r]-=w;
}
for (int i=0;i<n;i++){
if (i==0) works[i] = works_diff[i];
else {
works[i] = works[i-1]+works_diff[i];
}
}
sort(works.begin(),works.end(),cmp);
for (int i=0;i<n;i++){
cin>>times[i];
}
sort(times.begin(),times.end());
long long int ans = 0;
for (int i=0;i<n;i++){
ans+=works[i]*times[i];
}
cout<<ans;
}
```