前言
D.不会
r
u
n
run
run了
传送门 :
思路
对于这种题,考虑使用左端点排序 ( 因为这样子的话,我们只需要考虑右端点是否满足即可
考虑将所有盒子都放入一个集合中 , 对于每一个巧克力,我们都二分在集合中找一个最小的,
并且删去它,如果没找到,那么直接输出 N o No No
对于插入和删除操作都涉及到的集合,我们使用 m u l t i s e t multiset multiset
Mycode
const int N = 4e6+10;
struct node{
int x,y;
bool st;
bool operator<(const node &w)const{
if(w.x == x) return w.st < st;
return w.x < x;
}
}a[N];
multiset<int> s;
void solve()
{
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].x;
a[i].st = false;
}
for(int i=1;i<=n;i++) cin>>a[i].y;
for(int i=n+1;i<=m+n;i++){
cin>>a[i].x;
a[i].st = true;
}
for(int i=n+1;i<=m+n;i++) cin>>a[i].y;
sort(a+1,a+1+n+m);
for(int i=1;i<=n+m;i++){
if(a[i].st){//如果是盒子的话
s.insert(a[i].y);
}else{
auto it = s.lower_bound(a[i].y);
if(it!=s.end()) s.erase(it);
else{
cout<<"No"<<endl;
return;
}
}
}
cout<<"Yes"<<endl;
}