tg第一题看看我有错没
  • 板块灌水区
  • 楼主sycqwq
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/10/23 19:48
  • 上次更新2023/11/4 02:38:36
查看原帖
tg第一题看看我有错没
151647
sycqwq楼主2021/10/23 19:48

rt

#include<bits/stdc++.h>
#define iter set<node>::iterator
using namespace std;
inline int read()
{
	int d=0,f=0;
	char c=getchar();
	while(!isdigit(c))
		f|=c=='-',c=getchar();
	while(isdigit(c))
		d=d*10+(c^48),c=getchar();
	return f?-d:d;
}
const int maxn=1e5+5;
struct node
{
	int l,r;
	bool operator<(node s1)const
	{
		return l<s1.l;
	}
}a[maxn],b[maxn];
set<node> q,p;
int f1[maxn],f2[maxn],n,m1,m2;
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].l>>a[i].r;
		q.insert(a[i]);
	}
	for(int i=1;i<=m2;i++)
	{
		cin>>b[i].l>>b[i].r;
		p.insert(b[i]);
	}
	int tot=0;
	for(iter i=q.begin();i!=q.end();i++)
	{
		int tp=1;
		iter it=q.lower_bound((node){i->r,0});
		while(it!=q.end())
		{
			int t=it->r; 
			q.erase(it);
			it=q.lower_bound((node){t,0});
			++tp;
		}
//		cout<<tp<<endl;
		++tot;
		f1[tot]=f1[tot-1]+tp;
	}
	int cnt=0; 
	for(iter i=p.begin();i!=p.end();i++)
	{
		int tp=1;
		iter it=p.lower_bound((node){i->r,0});
		while(it!=p.end())
		{
			++tp;
			int t=it->r;
			p.erase(it);
			it=p.lower_bound((node){t,0});
		}
		++cnt;
		f2[cnt]=f2[cnt-1]+tp;
	}
	for(int i=1;i<=n;i++)
	{
		f1[i]=max(f1[i],f1[i-1]);
		f2[i]=max(f2[i],f2[i-1]);
//		cerr<<f1[i]<<' '<<f2[i]<<endl;
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,f1[i]+f2[n-i]);
	}
	cout<<ans;
	return 0;
}

2021/10/23 19:48
加载中...