code
#include<bits/stdc++.h>
#define rep(a,b,c) for(int c=(a);c<=(b);++c)
#define drep(a,b,c) for(int c=(a);c>=(b);--c)
using namespace std;
inline int read()
{
int res=0;char ch=getchar();bool flag=0;
while(ch<'0'||ch>'9')flag^=(ch=='-'),ch=getchar();
while(ch<='9'&&ch>='0')res=res*10+(ch^48),ch=getchar();
return flag ? -res : res ;
}
const int N=8e5+10,NN=8e5+10;
int n,m1,m2;int L1[N],R1[N],L2[N],R2[N],P[NN],pp,loc[NN];short a[NN];
inline int fnd(int k)
{
int l=1,r=pp,res,mid;
while(l<=r)P[mid=(l+r)>>1]<=k?(l=mid+1,res=mid):(r=mid-1);
return res;
}
namespace Sub1
{
bool vis[N];inline int check(int A,int B)
{
int c1=0,c2=0,ans=0;rep(1,pp,i)
{
if(a[i]==1&&c1<A)++c1,++ans,vis[loc[i]]=1;
if(a[i]==2&&c2<B)++c2,++ans,vis[loc[i]+m1]=1;
if(a[i]==-1&&vis[loc[i]])--c1,vis[loc[i]]=0;
if(a[i]==-2&&vis[loc[i]+m1])--c2,vis[loc[i]+m1]=0;
}
return ans;
}
inline void mian()
{
int ans=0;rep(0,n,i)ans=max(ans,check(i,n-i));
printf("%d\n",ans);return;
}
}
namespace Sub2
{
int vis[N],vis2[N],an[N],an2[N];
priority_queue<int, vector<int> , greater<int> > h;
inline void mian()
{
rep(1,m1,i)h.push(i);
rep(1,pp,i)
{
if(a[i]==1){vis[loc[i]]=h.top();h.pop();}
if(a[i]==-1){h.push(vis[loc[i]]);}
}
while(!h.empty())h.pop();
rep(1,m2,i)h.push(i);
rep(1,pp,i)
{
if(a[i]==2){vis2[loc[i]]=h.top();h.pop();}
if(a[i]==-2){h.push(vis2[loc[i]]);}
}
rep(1,m1,i)++an[vis[i]];rep(1,m2,i)++an2[vis2[i]];
rep(1,m1,i)an[i]+=an[i-1];rep(1,m2,i)an2[i]+=an2[i-1];
int ans=0;rep(0,n,i)ans=max(ans,an[i]+an2[n-i]);
printf("%d\n",ans);return;
}
}
int main()
{
// freopen("airport.in","r",stdin);
// freopen("airport.out","w",stdout);
n=read(),m1=read(),m2=read();
rep(1,m1,i)P[++pp]=L1[i]=read(),P[++pp]=R1[i]=read();
rep(1,m2,i)P[++pp]=L2[i]=read(),P[++pp]=R2[i]=read();
sort(P+1,P+pp+1);
rep(1,m1,i)L1[i]=fnd(L1[i]),R1[i]=fnd(R1[i]);
rep(1,m2,i)L2[i]=fnd(L2[i]),R2[i]=fnd(R2[i]);
rep(1,m1,i)a[L1[i]]=1,a[R1[i]]=-1,loc[L1[i]]=loc[R1[i]]=i;
rep(1,m2,i)a[L2[i]]=2,a[R2[i]]=-2,loc[L2[i]]=loc[R2[i]]=i;
if(n<=5000&&m1+m2<=5000)Sub2::mian();//这里为了hack特判过,考场程序为Sub1::mian();但大数据同理,Sub2会在n<=m1+m2时炸
else Sub2::mian();return 0;
}
hack:
1000 2 2
1 2
3 4
5 6
7 8
answer
4
output
2
没判n<=m1+m2