链接:http://exam.upc.edu.cn/problem.php?cid=1430&pid=22
题意:
n头牛,每头需要一个值在min-max之间的数。m个数,每个数num个。每头牛分配一个值,问最多几头牛获得它想要的值。
思路:
贪心,按 牛的min 和 数的值 升序排列,遍历,每次将min符合的加入队列,再看max是否符合,统计个数即可。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int n, m;
pair<int, int>cow[maxn], Ss[maxn];
priority_queue<int, vector<int>, greater<int> >que;
void solve(){
sort(cow+1, cow+n+1), sort(Ss+1, Ss+m+1);
int j=1, ans=0;
for(int i=1; i<=m; i++){
while(j<=n && cow[j].first<=Ss[i].first) que.push(cow[j].second), j++;
while(!que.empty() && Ss[i].second){
int x=que.top(); que.pop();
if(x<Ss[i].first) continue;
ans ++;
Ss[i].second--;
}
}
cout << ans << endl;
}
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++) cin >> cow[i].first >> cow[i].second;
for(int i=1; i<=m; i++) cin >> Ss[i].first >> Ss[i].second;
solve();
return 0;
}