本来想着好歹暴力拿个40分进noip,爆零属实不理解
#include<bits/stdc++.h>
using namespace std;
const int Max_n=100005,INF=0x7fffffff;
int n,m1,m2,ans,f[Max_n],sum1[Max_n],sum2[Max_n],m;
struct node
{
int t1,t2;
}a[Max_n],b[Max_n];
bool cmp(node a,node b)
{
return a.t1<b.t1;
}
void solve(int x,int t)
{
f[x]=t;
for(int i=x;i<=m;i++){
if(a[i].t1>a[x].t2&&f[i]==0){
solve(i,t);
break;
}
if(i==m)break;
}
}
int main()
{
freopen("airport.in","r",stdin);freopen("airport.out","w",stdout);
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++){
cin>>a[i].t1>>a[i].t2;
}sort(a+1,a+1+m1,cmp);
for(int i=1;i<=m2;i++){
cin>>b[i].t1>>b[i].t2;
}sort(b+1,b+1+m2,cmp);
m=m1;
for(int i=1,p=1;i<=m1;i++){
if(f[i]>0)continue;
solve(i,p);
p++;
}
for(int i=1;i<=m1;i++){
sum1[f[i]]++;
f[i]=0;
}
m=m2;
for(int i=1,p=1;i<=m2;i++){
if(f[i]>0)continue;
solve(i,p);
p++;
}
for(int i=1;i<=m2;i++){
sum2[f[i]]++;
f[i]=0;
}
for(int i=0;i<=n;i++){
sum1[i]+=sum1[i-1];
sum2[i]+=sum2[i-1];
//cout<<sum1[i]<<" "<<sum2[i]<<endl;
}
for(int i=0;i<=n;i++){
ans=max(ans,sum1[i]+sum2[n-i]);
}
cout<<ans;
return 0;
}