#贪心#洛谷 6093 [JSOI2015]套娃

题目


分析

按好看度从大到小排序,每次选择一个尽量大的外径装入当前套娃的内径,
这样可以保证是最优的,删除选完的外径可以用平衡树实现


代码

#include <cstdio>
#include <cctype>
#include <set>
#include <algorithm>
#define rr register
using namespace std;
const int N=200011;
multiset<int>uk;
multiset<int>::iterator it;
int l[N],r[N],rk[N],n;
long long a[N],ans;
inline signed iut(){
	rr int ans=0; rr char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
	return ans;
}
bool cmp(int x,int y){return a[x]>a[y];}
signed main(){
	n=iut();
	for (rr int i=1;i<=n;++i){
		r[i]=iut(),l[i]=iut(),a[i]=iut(),
		rk[i]=i,uk.insert(r[i]),ans+=a[i]*l[i];
	}
	sort(rk+1,rk+1+n,cmp);
	for (rr int i=1;i<=n;++i){
		it=uk.lower_bound(l[rk[i]]);
		if (it!=uk.begin()) --it,ans-=a[rk[i]]*(*it),uk.erase(it);
	}
	return !printf("%lld",ans);
} 
posted @ 2021-06-21 16:10  lemondinosaur  阅读(37)  评论(0编辑  收藏  举报