题意简单的说,每个植物的在不同时间段有三个价值,分为a,b,c。
找到最佳时间的最大价值,只需要求出价值的值。
可以把这三个值,类似于哈希用map把对应的时间边界和价值数关联。
那么循环便利一遍,map是有自动排序的,从小的时间点循环到最大的时间点。
其中得到的最值便为最大价值。
离散化,因为l到r的时间段内,时间点可取任意实数,也就是可以取0.5,那么必须要把
r+1和下次会碰到的另一个植物的l时间点分开,所以需要离散化。变为r*2+1 和 l*2
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
map<int ,long long> A;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
int l,r,a,b,c;
scanf("%d%d%d%d%d",&l,&r,&a,&b,&c);
A[0]+=c;
A[l*2]+=a-c;
A[r*2+1]+=b-a;
}
long long ans=0;
long long cnt=0;
for(map<int,long long>::iterator it=A.begin();it!=A.end();it++){
cnt+=(it->second);
ans=max(ans,cnt);
}
cout<<ans<<endl;
}
return 0;
}