题意:
有一些牛,每只只能涂大于等于a小于等于b spf的防晒霜,
现在我们有一些防晒霜,给出他的spf和量,求最多可以涂好多只牛
题解:
遍历每一个防晒霜,当牛的可能可以接受这个防晒霜时候,就加入队列,每次排头的是最小的那个,然后每次检测队列里面的值是不是符合要求,是就ans++,不是就再也找不出符合他的了,因为防晒霜也是从小到大spf排列的
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
#define pr(x) cout<<#x<<" "<<x;
#define pl(x) cout<<#x<<" "<<x<<endl;
#include<math.h>
#include<algorithm>
using namespace std;
typedef pair<int ,int> p;
int main(){
int c,l;
cin>>c>>l;
priority_queue <int,vector<int>,greater<int> > que;
p scow[2505];
p spf[2505];
for(int i = 0;i<c;i++){
cin>>scow[i].first>>scow[i].second;
}
for(int i = 0;i<l;i++){
cin>>spf[i].first>>spf[i].second;
}
sort(scow,scow+c);
sort(spf,spf+l);
int ans = 0;int j =0;
for(int i= 0;i<l;i++){
while(j<c&&spf[i].first >= scow[j].first){
que.push(scow[j].second);j++;
}
while(!que.empty()&&spf[i].second>0){
int x = que.top();
que.pop();
if(x<spf[i].first)continue;
ans++;
spf[i].second--;
}
}
cout<<ans<<endl;
}