set94分求助
查看原帖
set94分求助
785917
Chthollian楼主2024/11/20 19:14

Wa on 1

#include<bits/stdc++.h>
#define IT set<Node>::iterator
#define ls now*2
#define rs now*2+1
using namespace std;
struct Node
{
	long long c,p;
	Node(long long C,long long P) : c(C),p(P) {}
	bool operator < (const Node &ano) const
	{
		return (p==ano.p?c<ano.c:p<ano.p);
	}
};
multiset<Node> s;
struct Q
{
	long long v,d;
	bool operator < (const Q &ano) const
	{
		return (v==ano.v?d<ano.d:v>ano.v);
	}
} q[5000005];
int n,m,o,cnt;
long long ans[5000005],sum;
bool cmp(long long x,long long y)
{
	return x>y;
}
int main()
{
	cin>>n>>m>>o;
	for(int i=1;i<=n;i++)
	{
		long long c,p;
		cin>>c>>p;
		s.insert(Node(c,p)); 
	}
	for(int i=1;i<=m;i++)
	{
		cin>>q[i].v>>q[i].d; 
	}
	sort(q+1,q+m+1);
	for(int i=1;i<=n;i++)
	{
//		cout<<q[i].v<<" "<<q[i].d<<"\n";
		IT it=s.lower_bound(Node(-1,q[i].d));
		if(it==s.end() || q[i].v<=it->c)
		{
			continue;
		}
		ans[++cnt]=q[i].v-it->c;
		s.erase(it);
	}
	sort(ans+1,ans+cnt+1,cmp);
	for(int i=1;i<=min(cnt,o);i++)
	{
//		cout<<ans[i]<<"\n";
		sum+=ans[i];
	}
	cout<<sum;
    return 0;
}
2024/11/20 19:14
加载中...