代码如下
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m1,m2;
struct node
{
ll s,e;
};
node a[1000000],b[1000000];
bool cmp(node a,node b)
{
return a.s<b.s;
}
node ans1[1000000],ans2[1000000];
ll maxn1[1000000],maxn2[1000000];
ll cnt=1;
ll ans;
bool f=0;
int main()
{
// freopen("airport.in","r",stdin);
// freopen("airport.out","w",stdout);
scanf("%lld%lld%lld",&n,&m1,&m2);
for(int i=1;i<=m1;i++) scanf("%lld%lld",&a[i].s,&a[i].e);
for(int i=1;i<=m2;i++) scanf("%lld%lld",&b[i].s,&b[i].e);
sort(a+1,a+1+m1,cmp);sort(b+1,b+1+m2,cmp);
ans1[1]=a[1];maxn1[1]=1;
for(int i=2;i<=m1;i++)
{
f=0;
for(int j=1;j<=cnt;j++)
{
if(a[i].s>ans1[j].e)
{
f=1;
ans1[j]=a[i];
maxn1[j]++;
break;
}
}
if(f==0)
{
cnt++;
ans1[cnt]=a[i];
maxn1[cnt]++;
}
}
for(int i=2;i<=n;i++) maxn1[i]+=maxn1[i-1];
cnt=1;ans2[1]=b[1];maxn2[1]=1;
for(int i=2;i<=m2;i++)
{
f=0;
for(int j=1;j<=cnt;j++)
{
if(b[i].s>ans2[j].e)
{
f=1;
ans2[j]=b[i];
maxn2[j]++;
break;
}
}
if(f==0)
{
cnt++;
ans2[cnt]=b[i];
maxn2[cnt]++;
}
}
for(int i=2;i<=n;i++) maxn2[i]+=maxn2[i-1];
for(int i=1;i<=n;i++)
{
ans=max(ans,maxn1[i]+maxn2[n-i]);
}
printf("%lld",ans);
return 0;
}