Sunscreen

 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10586 Accepted: 3702

Description

To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her hide withsunscreen when they're at the beach. Cow i has a minimum and maximum SPF rating (1 ≤ minSPFi ≤ 1,000; minSPFi ≤ maxSPFi ≤ 1,000) that will work. If the SPF rating is too low, the cow sufferssunburn; if the SPF rating is too high, the cow doesn'ttan at all........

The cows have a picnic basket with L (1 ≤ L ≤ 2500) bottles of sunscreen lotion,each bottle i with an SPF rating SPFi (1 ≤ SPFi ≤ 1,000). Lotion bottle i can cover coveri cows with lotion. A cow may lotionfrom only one bottle.

What is the maximum number of cows that can protect themselveswhile tanning given the available lotions?

Input

* Line 1: Two space-separated integers: C and L
* Lines 2..C+1: Line i describes cow i's lotion requires with twointegers: minSPFi and maxSPFi
* Lines C+2..C+L+1:Line i+C+1describes a sunscreen lotion bottle i with space-separated integers: SPFi and coveri

Output

A single line with an integer that is the maximum number of cowsthat can be protected while tanning

SampleInput

3 2

3 10

2 5

1 5

6 2

4 1

SampleOutput

2

Source

`#include<cstdio>#include<cstring>#include<cstdlib>#include<cctype>#include<cmath>#include<iostream>#include<sstream>#include<iterator>#include<algorithm>#include<string>#include<vector>#include<set>#include<map>#include<stack>#include<deque>#include<queue>#include<list>using namespace std;const double eps = 1e-8;typedef long long LL;typedef unsigned long long ULL;const int INT_INF = 0x3f3f3f3f;const int INT_M_INF = 0x7f7f7f7f;const LL LL_INF = 0x3f3f3f3f3f3f3f3f;const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};const int MOD = 1e9 + 7;const double pi = acos(-1.0);const int MAXN = 1e5 + 10;const int MAXT = 10000 + 10;#define N 2550struct node{  int x,y;}cow[N],l[N];int n,m; bool cmp(const node&a,const node&b)  {     return  a.x<b.x;  }  int solve(){  sort(cow+1,cow+n+1,cmp);  sort(l+1,l+m+1,cmp);  priority_queue<int,vector<int>,greater<int> >q;//从小到大牌排列，默认是从大到小   int ans=0,cur=1;  for(int i=1;i<=m;i++)  {    while(cur<=n&&cow[cur].x<=l[i].x)    {              q.push(cow[cur].y);  //母牛进队      ++cur;               //进队母牛+1    }    while(!q.empty()&&l[i].y)    {      int t=q.top();      q.pop();             if(t>=l[i].x)      {         ans++;      //可以使用         --l[i].y;   //物品数量-1      }    }  }  return ans;}int main(){    while(scanf("%d%d",&n,&m)!=EOF)  {    for(int i=1;i<=n;i++)    {        scanf("%d%d",&cow[i].x,&cow[i].y);    }    for(int i=1;i<=m;i++)    {      scanf("%d%d",&l[i].x,&l[i].y);    }    printf("%d\n",solve());  }  return 0;  }`