题意
有 NNN 个遗迹,MMM 个宝石。当探索到第 iii 个遗迹,可以获得 lil_ili 到 rir_iri 的所有宝石,加上 sis_isi 的得分。但当 MMM 个宝石都被探索后,得分将会清零。
思路
考虑贪心,我们只用留下任意一个宝石即可。
其实,我们第 iii 次只用将区间 [1,li−1][1,l_{i}-1][1,li−1] 的宝石加上 sis_isi 的得分,和将区间 [ri+1,M][r_{i}+1,M][ri+1,M] 的宝石也加上 sis_isi 的得分。但是,这样会超时。
所以,我们可以使用差分数组来优化(线段树也可以)。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int cf[100005],QZ;
int ans;
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1,l,r,s;i<=n;i++){
scanf("%lld%lld%lld",&l,&r,&s);
cf[1]+=s,cf[l]-=s,cf[r+1]+=s;//差分
}
for(int i=1;i<=m;i++){
QZ+=cf[i];//第i个宝石保留所获得的得分
ans=max(ans,QZ);//求最大值
}
printf("%lld\n",ans);
return 0;
}