Link
#include "bits/stdc++.h"
using namespace std ;
const int N = 100005 ;
struct Node {int t, n ;} ;
bool cmp(Node a, Node b) {return a.t < b.t ? 1 : a.n < b.n ;}
int n, m1, m2, ans, ans1, ans2, sum1[N], sum2[N] ;
Node a[N] ;
int b[N], cnt1, cnt2 ;
priority_queue<int, vector<int>, greater<int> > q1, q2 ;
void solve()
{
for(int i = 1 ; i <= m1 + m2 ; ++i)
{
priority_queue<int, vector<int>, greater<int> > *th ;
int *cnt, *sum ;
if(a[i].n <= m1) th = &q1, cnt = &cnt1, sum = sum1 ;
else th = &q2, cnt = &cnt2, cnt = &cnt2, sum = sum2 ;
while(!th->empty() && th->top() <= a[i].t) th->pop(), *cnt = *cnt - 1 ;
th->push(b[a[i].n]) ;
*cnt = *cnt + 1 ;
sum[*cnt] = max(sum[*cnt], (int)th->size()) ;
}
}
int main()
{
// freopen("airport.in","r",stdin) ;
// freopen("airport.out","w",stdout) ;
ios::sync_with_stdio(false) ;
cin.tie(0) ; cout.tie(0) ;
cin >> n >> m1 >> m2 ;
for(int i = 1 ; i <= m1 + m2 ; ++i)
{
cin >> a[i].t >> b[i] ;
a[i].n = i ;
}
sort(a + 1, a + m1 + m2, cmp) ;
solve() ;
for(int i = 1 ; i <= n ; ++i) sum1[i] += sum1[i - 1] ;
for(int i = n ; i >= 1 ; --i) sum2[i] += sum2[i + 1] ;
for(int i = 1 ; i <= n ; ++i)
{
ans = max(ans, sum1[i] + sum2[n - i]) ;
}
cout << ans ;
return 0 ;
}