只有我三分吗,看来我抱灵了.../kk
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int kMaxN=2e5+1;
struct AIR1
{
int st,en;
}a[kMaxN];
struct AIR2
{
int st,en;
}b[kMaxN];
int n,m1,m2;
int l,r;
int ans[kMaxN],s;
bool cmp1(AIR1 i,AIR1 j)
{
return i.st<j.st;
}
bool cmp2(AIR2 i,AIR2 j)
{
return i.st<j.st;
}
int Count(int x)
{
int num=0,can=0;
priority_queue<int,vector<int>,greater<int> >q;
for(int i=1;i<=m1;i++)
{
if(q.empty()||q.top()>a[i].st)
{
if(num+1<=x)
{
num++;
can++;
q.push(a[i].en);
}
}
else
{
q.pop();
can++;
q.push(a[i].en);
}
}
//cout<<can<<" ";
num=0;
priority_queue<int,vector<int>,greater<int> >q2;
for(int i=1;i<=m2;i++)
{
if(q2.empty()||q2.top()>b[i].st)
{
if(num+1<=n-x)
{
num++;
can++;
q2.push(b[i].en);
}
}
else
{
q2.pop();
can++;
q2.push(b[i].en);
}
}
ans[x]=can;
//cout<<can<<"\n";
return can;
}
int main()
{
freopen("airport.in","r",stdin);
freopen("airport.out","w",stdout);
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++)
{
cin>>a[i].st>>a[i].en;
}
for(int i=1;i<=m2;i++)
{
cin>>b[i].st>>b[i].en;
}
sort(a+1,a+m1+1,cmp1);
sort(b+1,b+m2+1,cmp2);
r=n;
while(l<=r)
{
int mid1=l+(r-l)/3,mid2=r-(r-l)/3;
//cout<<l<<" "<<mid1<<" "<<mid2<<" "<<r<<"\n";
if(Count(mid1)>Count(mid2))
{
s=mid1;
r=mid2-1;
}
else
{
s=mid2;
l=mid1+1;
}
}
cout<<Count(s);
return 0;
}