关于tgT1
查看原帖
关于tgT1
210719
Violet___Evergarden楼主2021/10/23 21:14

只有我三分吗,看来我抱灵了.../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;
}
2021/10/23 21:14
加载中...