题解:
主要是要发现贪心的策略,就是对x进行排序,对每一个门从小到大遍历,然后把满足条件的人加进来,然后选出最高的那个可以手模证明一下
#include<bits/stdc++.h>
using namespace std;
int n,k;
int sum;
set<pair<int,int> >door,dead;
int read(){
int num=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
num=(num<<1)+(num<<3)+ch-'0';
ch=getchar();
}
return num*f;
}
int main(){
k=read();
n=read();
for(int i=1;i<=n;i++){
int x=read(),y=read();
dead.insert(make_pair(x,y));
}
for(int i=1;i<=n;i++){
int x=read(),y=read();
door.insert(make_pair(x,y));
}
for(set<pair<int,int> >::iterator it=door.begin();it!=door.end();it++){
int maxx=-1;
pair<int,int>zb;
for(set<pair<int,int> >::iterator itt=dead.begin();itt!=dead.end();itt++){
if((*itt).first>(*it).first) break;
if((*itt).second>(*it).second) continue;
if((*itt).second>maxx){
zb=*itt;
maxx=(*itt).second;
}
}
if(maxx>=0){
dead.erase(zb);
sum++;
}
}
printf("%d",sum);
return 0;
}