45分 优先队列 求助
查看原帖
45分 优先队列 求助
721085
yinruiyang666楼主2022/10/25 15:50

45分求助

两个优先队列 维护飞机离开的最早时间

#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int x;
	scanf("%d",&x);
	return x;
}
struct p{
	int arr,lea;
	bool operator <(const p &a) const {return lea>a.lea;}
};
int ans;
int n,m1,m2;
p p1[100010],p2[100010];


bool cmp (p a,p b){
	return a.arr<b.arr;
}

void cal(int s)
{
	int tol=0;
	
	priority_queue<p> q;
	if(s>0) 
	for(int i=1;i<=s;i++)
	{
		q.push(p1[i]);
		tol++;
	}
	if (s>0) for(int i=s+1;i<=m1;i++)
	{
		p topp=q.top();
		if(p1[i].arr<=topp.lea) continue;
		q.pop();
		q.push(p1[i]); 
		tol++;	
	}
	
	priority_queue<p> q2;
	if(n-s>0)
	for(int i=1;i<=n-s;i++)
	{
		q2.push(p2[i]);
		tol++;
	}
	if (n-s>0) for(int i=n-s+1;i<=m2;i++)
	{
		p top2=q2.top();
		if(p2[i].arr<=top2.lea) continue;
		q2.pop();
		q2.push(p2[i]); 
		tol++;}
	ans=max(ans,tol);
	
}

signed main(){
	
	n=read(),m1=read(),m2=read();
	for(int i=1;i<=m1;i++) 
	  p1[i].arr=read(),p1[i].lea=read();
	for(int i=1;i<=m2;i++)
	  p2[i].arr=read(),p2[i].lea=read();
	sort(p1+1,p1+1+m1,cmp);sort(p2+1,p2+1+m2,cmp);

	for(int i=0;i<=n;i++) cal(i);
	cout<<ans;
	return 0;
} 
2022/10/25 15:50
加载中...