题意:有N个奶牛去晒太阳 \((1<=N<=2500)\),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值.所以奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值.给出了\(M(1<=M<=2500)\)种防晒霜.每种防晒霜的固定的阳光强度和数量也给出来了,每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个.
分析:贪心策略:给奶牛按照最小忍受值从大到小排序,对于每一头奶牛,选择符合该奶牛的且阳光强度最大且有剩余的防晒霜即可.
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
inline int read(){
int x=0,o=1;char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')o=-1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*o;
}
const int N=2505;
struct ppx{
int l,r;
}a[N];
struct PPX{
int x,y;
}b[N];
inline bool cmp(const ppx &x,const ppx &y){return x.l>y.l;}
inline bool CMP(const PPX &X,const PPX &Y){return X.x>Y.x;}
int main(){
int n=read(),m=read();
for(int i=1;i<=n;++i){
a[i].l=read();
a[i].r=read();
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=m;++i){
b[i].x=read();
b[i].y=read();
}
sort(b+1,b+m+1,CMP);
int ans=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(b[j].x>=a[i].l&&b[j].x<=a[i].r&&b[j].y>=1){
++ans;--b[j].y;break;
}
printf("%d",ans);
return 0;
}