正题
题目大意:https://jzoj.net/senior/#main/show/1246
题目大意
nnn头牛,第iii头吃的东西价格大于aia_iai,鲜嫩度大于bib_ibi。mmm个吃的,第iii个价格为cic_ici,鲜嫩度为did_idi。
求满足所有奶牛的情况下最少要花多少钱。
解题思路
按照鲜嫩程度排序,然后枚举奶牛时依次加入物品,对于每个奶牛,选择满足它要求的最便宜的物品,用multisetmultisetmultiset维护即可。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#define ll long long
using namespace std;
const ll N=100100;
multiset<int> s;
struct node{ll v,w;
}a[N],b[N];
ll n,m,ans;
bool cmp(node x,node y)
{return x.w>y.w;}
int main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld%lld",&a[i].v,&a[i].w);for(ll i=1;i<=m;i++)scanf("%lld%lld",&b[i].v,&b[i].w);sort(a+1,a+1+n,cmp);sort(b+1,b+1+m,cmp);ll l=1;for(ll i=1;i<=n;i++){while(l<=m&&b[l].w>=a[i].w)s.insert(b[l++].v);multiset<int>::iterator it=s.lower_bound(a[i].v);if(it==s.end()){printf("-1");return 0;}ans+=*it;s.erase(it);}printf("%lld",ans);
}