蒟蒻求助时间复杂度,不会算。。。
查看原帖
蒟蒻求助时间复杂度,不会算。。。
206833
David207楼主2021/10/27 17:07

代码如下

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m1,m2;
struct node
{
	ll s,e;
};
node a[1000000],b[1000000];
bool cmp(node a,node b)
{
	return a.s<b.s;
}
node ans1[1000000],ans2[1000000];
ll maxn1[1000000],maxn2[1000000];
ll cnt=1;
ll ans;
bool f=0;
int main()
{
// 	freopen("airport.in","r",stdin);
// 	freopen("airport.out","w",stdout);
	scanf("%lld%lld%lld",&n,&m1,&m2);
	for(int i=1;i<=m1;i++) scanf("%lld%lld",&a[i].s,&a[i].e);
	for(int i=1;i<=m2;i++) scanf("%lld%lld",&b[i].s,&b[i].e);
	sort(a+1,a+1+m1,cmp);sort(b+1,b+1+m2,cmp);
	ans1[1]=a[1];maxn1[1]=1;
	for(int i=2;i<=m1;i++)
	{
		f=0;
		for(int j=1;j<=cnt;j++)
		{
			if(a[i].s>ans1[j].e)
			{
				f=1;
				ans1[j]=a[i];
				maxn1[j]++;
				break;
			}
		}
		if(f==0)
		{
			cnt++;
			ans1[cnt]=a[i];
			maxn1[cnt]++;
		}
	}
	for(int i=2;i<=n;i++) maxn1[i]+=maxn1[i-1];
	cnt=1;ans2[1]=b[1];maxn2[1]=1;
	for(int i=2;i<=m2;i++)
	{
		f=0;
		for(int j=1;j<=cnt;j++)
		{
			if(b[i].s>ans2[j].e)
			{
				f=1;
				ans2[j]=b[i];
				maxn2[j]++;
				break;
			}
		}
		if(f==0)
		{
			cnt++;
			ans2[cnt]=b[i];
			maxn2[cnt]++;
		}
	}
	for(int i=2;i<=n;i++) maxn2[i]+=maxn2[i-1];
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,maxn1[i]+maxn2[n-i]);
	}
	printf("%lld",ans);
	return 0;
} 
2021/10/27 17:07
加载中...