RT,我觉得吧我这个算法是O(nm)的
那为什么能AC
#include<bits/stdc++.h>
using namespace std;
struct node
{
int go,leave;
}planes[200001];
int tot;
int n,m_1,m_2;
int depth_1[300001],maxx_1[300001];
int depth_2[300001],maxx_2[300001];
int ans_1[300001],ans_2[300001],ans=0;
int x,y;
bool cmpss(node a,node b)
{
return a.go<b.go;
}
int main()
{
// freopen("airport.in","r",stdin);
// freopen("airport.out","w",stdout);
cin>>n>>m_1>>m_2;
for(int i=1;i<=m_1;i++)
{
cin>>planes[i].go>>planes[i].leave;
}
sort(planes+1,planes+m_1+1,cmpss);
for(int i=1;i<=m_1;i++)
{
for(int j=1;j<=n;j++)
{
if(maxx_1[j]<planes[i].go)
{
depth_1[j]++;
maxx_1[j]=planes[i].leave;
break;
}
}
}
for(int i=1;i<=n;i++)
{
ans_1[i]=depth_1[i]+ans_1[i-1];
}
for(int i=1;i<=m_2;i++)
{
cin>>planes[i].go>>planes[i].leave;
}
sort(planes+1,planes+m_2+1,cmpss);
for(int i=1;i<=m_2;i++)
{
for(int j=1;j<=n;j++)
{
if(maxx_2[j]<planes[i].go)
{
depth_2[j]++;
maxx_2[j]=planes[i].leave;
break;
}
}
}
for(int i=1;i<=n;i++)
{
ans_2[i]=depth_2[i]+ans_2[i-1];
}
for(int i=0;i<=n;i++)
{
ans=max(ans,ans_1[i]+ans_2[n-i]);
}
cout<<ans;
return 0;
}