#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
typedef pair<int,int> P;
struct plane{
int l,r;
}a[100010],b[100010];
int c1[100010],c2[100010];
bool cmp(plane a,plane b){
return a.l<b.l;
}
priority_queue<P,vector<P>,greater<P> > q1,q2;
priority_queue<int,vector<int>,greater<int> > r1,r2;
int n,m1,m2;
int main(){
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++){
cin>>a[i].l>>a[i].r;
r1.push(i);
}
for(int i=1;i<=m2;i++){
cin>>b[i].l>>b[i].r;
r2.push(i);
}
sort(a+1,a+1+m1,cmp);
sort(b+1,b+1+m2,cmp);
for(int i=1;i<=m1;i++){
while(!q1.empty()&&q1.top().first<a[i].l){
r1.push(q1.top().second);
q1.pop();
}
q1.push(make_pair(a[i].r,r1.top()));
c1[r1.top()]++;
r1.pop();
}
for(int i=1;i<=m2;i++){
while(!q2.empty()&&q2.top().first<b[i].l){
r2.push(q2.top().second);
q2.pop();
}
q2.push(make_pair(b[i].r,r2.top()));
c2[r2.top()]++;
r2.pop();
}
for(int i=2;i<=m1;i++){
c1[i]+=c1[i-1];
}
for(int i=2;i<=m2;i++){
c2[i]+=c2[i-1];
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,c1[i]+c2[n-i]);
}
cout<<ans;
return 0;
}
咋回事?