https://atcoder.jp/contests/abc245/tasks/abc245_e
n块巧克力,m个盒子,一个盒子装一块巧克力
能否把所有的巧克力都装进去
把盒子和巧克力都从大到小排序
multiset是可以有重复的元素
把大于巧克力宽 的盒子长放进multiset里
用二分lower_bound查找>=巧克力长的盒子,然后erase掉
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+25;
typedef long long ll;
int n,m;
int main()
{
cin>>n>>m;
vector<array<int,2>> box(m),cho(n);
for(int i=0;i<n;i++)
cin>>cho[i][0];
for(int i=0;i<n;i++)
cin>>cho[i][1];
for(int i=0;i<m;i++)
cin>>box[i][0];
for(int i=0;i<m;i++)
cin>>box[i][1];
sort(box.begin(),box.end(),greater<array<int,2>>());
sort(cho.begin(),cho.end(),greater<array<int,2>>());
//巧克力和盒子都是从大到小排的
multiset<int> s;
int j=0;
for(int i=0;i<n;i++)
{
while(j<m&&box[j][0]>=cho[i][0])
{s.insert(box[j][1]);
j++;
}
auto it=s.lower_bound(cho[i][1]);
if(it==s.end())
{
cout<<"No\n";
return 0;
}
s.erase(it);
}
cout<<"Yes\n";
}