#include<bits/stdc++.h>
using namespace std;
const int maxm=100005;
const int maxn=100005;
typedef pair<int,int> p;
struct nodepl
{
int a,b;
};
nodepl inpl[maxm],outpl[maxm];
int inbr[maxn],outbr[maxn];
priority_queue<p,vector<p> > q;
bool br[maxn];
int n,m1,m2,cnt=1;
void get_input()
{
scanf("%d %d %d",&n,&m1,&m2);
for(int i=1;i<=m1;i++)
{
scanf("%d %d",&inpl[i].a,&inpl[i].b);
}
for(int i=1;i<=m2;i++)
{
scanf("%d %d",&outpl[i].a,&outpl[i].b);
}
}
bool cmp(nodepl a,nodepl b)
{
return a.a<=b.a;
}
void init()
{
sort(inpl+1,inpl+m1+1,cmp);
sort(outpl+1,outpl+m2+1,cmp);
memset(inbr,0,sizeof(inbr));
memset(outbr,0,sizeof(outbr));
}
void greedy_br()
{
memset(br,false,sizeof(br));
for(int i=1;i<=m1;i++)
{
while(!q.empty()&&(-q.top().first)<=inpl[i].a)
{
br[q.top().second]=false;
if(q.top().second<=cnt)
{
cnt=q.top().second;
}
q.pop();
}
q.push(p(-inpl[i].b,cnt));
br[cnt]=true;
inbr[i]=n+1-cnt;
while(br[cnt])
{
cnt++;
}
}
while(!q.empty())
{
q.pop();
}
memset(br,false,sizeof(br));
cnt=1;
for(int i=1;i<=m2;i++)
{
while(!q.empty()&&(-q.top().first)<=outpl[i].a)
{
br[q.top().second]=false;
if(q.top().second<=cnt)
{
cnt=q.top().second;
}
q.pop();
}
q.push(p(-outpl[i].b,cnt));
br[cnt]=true;
outbr[i]=n+1-cnt;
while(br[cnt])
{
cnt++;
}
}
}
int calc_ans()
{
int inp[maxn],outp[maxn],res=0;
memset(inp,0,sizeof(inp));
memset(outp,0,sizeof(outp));
for(int i=1;i<=m1;i++)
{
inp[inbr[i]]++;
}
for(int i=1;i<=m2;i++)
{
outp[outbr[i]]++;
}
for(int i=m1-1;i>0;i--)
{
inp[i]=inp[i]+inp[i+1];
}
for(int i=m2-1;i>0;i--)
{
outp[i]=outp[i]+outp[i+1];
}
for(int i=1;i<=n+1;i++)
{
res=max(res,inp[i]+outp[n+2-i]);
}
return res;
}
int main()
{
// freopen("airport.in","r",stdin);
// freopen("airport.out","w",stdout);
get_input();
init();
greedy_br();
printf("%d\n",calc_ans());
return 0;
}
求助 CCF的三个样例全部通过了 交上去就只有15pts了。。。我想知道我哪里错了QAQ 我就只提交了两题 T3还是个O(Tn2^n)的暴力 T1是我唯一的希望了。。。qnq