RT 考场40pts代码
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int N = 1e5 + 1;
struct _ {int a,b;};
int n,p,q;
_ A[N],B[N];
inline bool cmp(_&L,_&R){return L.a < R.a || (L.a == R.a && L.b < R.b);}
bool used[N];
int main()
{
cin >> n >> p >> q;
for(int i = 1;i <= p;i++)
cin >> A[i].a >> A[i].b;
for(int i = 1;i <= q;i++)
cin >> B[i].a >> B[i].b;
sort(A+1,A+p+1,cmp);
sort(B+1,B+q+1,cmp);
vector<int>AA,BB;
AA.push_back(0);
bool flag = false;
while(!flag)
{ flag = true;
AA.push_back(AA.back());
int prev = 0;
for(int i = 1;i <= p;i++)
{
if(used[i]) continue;
if(prev > A[i].a)
flag = false;
else
++AA.back(),(prev = A[i].b),used[i] = true;
}
}
memset(used,0x00,sizeof(used));
BB.push_back(0);
flag = false;
while(!flag)
{ flag = true;
BB.push_back(BB.back());
int prev = 0;
for(int i = 1;i <= q;i++)
{
if(used[i]) continue;
if(prev > B[i].a)
flag = false;
else
++BB.back(),(prev = B[i].b),used[i] = true;
}
}
int ans = 0;
for(int r = 0;r <= n;r++)
{
int e = r >= AA.size() ? AA[AA.size() - 1] : AA[r];
int f = n - r >= BB.size() ? BB[BB.size() - 1] : BB[n - r];
ans = max(ans,e + f);
}
cout << ans;
}