1. 程式人生 > 其它 >#貪心#洛谷 6093 [JSOI2015]套娃

#貪心#洛谷 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);
}