数据有点水
查看原帖
数据有点水
167279
Danno0v0楼主2021/10/25 08:20

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;
}
2021/10/25 08:20
加载中...