Sunscreen (贪心&map)

题目传送门

思路:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e3+5;
struct p{
	int l,r;
	bool operator<(const p&a)const{
		return l<a.l;
	}
}a[N];
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r);
	sort(a+1,a+n+1);
	map<int,int>mp;
	mp[0]=n;
	for(int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),mp[x]+=y;
	int ans=0;
	for(int i=n;i>=1;i--)
	{
		auto it=mp.upper_bound(a[i].r);//返回迭代器. 
		--it;
		if(it->first>=a[i].l){
			ans++;
			(it->second)--;
			if(it->second==0) mp.erase(it);
		}
	}
	printf("%d\n",ans);
}