求助数据点2MLE
查看原帖
求助数据点2MLE
189596
LZJX楼主2021/11/3 13:11

RT,怎么都找不出是哪里的问题,求大佬帮忙找找

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#define M(x,y) make_pair(x,y)
using namespace std;
struct fi{
	int a,b;
}fli[100010];
bool cmp1(fi x,fi y)
{
	return x.a<y.a;
}
struct fd{
	int a,b;
}fld[100010];
bool cmp2(fd x,fd y)
{
	return x.a<y.a;
}
int ni[100010],nd[100010],n,m1,m2;
priority_queue< pair<int,int> > qi;
priority_queue< pair<int,int> > qd;
priority_queue< int > ai;
priority_queue< int > ad; 
int nqi=0,nqd=0;
int main()
{
//	freopen("airport.in","r",stdin);
//	freopen("airport.out","w",stdout);
	int a,b,x,y;
	cin>>n>>m1>>m2;
	for(int i=1;i<=m1;++i)
	{
		cin>>fli[i].a>>fli[i].b;
	}
	sort(fli+1,fli+m1+1,cmp1);
	for(int i=1;i<=m2;++i)
	{
		cin>>fld[i].a>>fld[i].b;
	}
	sort(fld+1,fld+m2+1,cmp2);
	for(int i=1;i<=m1;++i)
	{
		if(qi.empty())
		{
			qi.push(M(-fli[i].b,1));
			ni[1]++;
			nqi++;
		}
		else
		{
			x=-qi.top().first,y=qi.top().second;
			while(x<fli[i].a && !qi.empty())
			{
				ai.push(-y);
				qi.pop();
				x=-qi.top().first,y=qi.top().second;
			}
			if(!ai.empty())
			{
				y=-ai.top();
				qi.push(M(-fli[i].b,y));
				ni[y]++;
				ai.pop();
			}
			else
			if(nqi<n)
			{
				nqi++;
				qi.push(M(-fli[i].b,nqi));
				ni[nqi]++;
			}
			else
			continue;
		}
	}
	for(int i=1;i<=m2;++i)
	{
		if(qd.empty())
		{
			qd.push(M(-fld[i].b,1));
			nd[1]++;
			nqd++;
		}
		else
		{
			x=-qd.top().first,y=qd.top().second;
			while(x<fld[i].a && !qi.empty())
			{
				ad.push(-y);
				qd.pop();
				x=-qd.top().first,y=qd.top().second;
			}
			if(!ad.empty())
			{
				y=-ad.top();
				qd.push(M(-fld[i].b,y));
				nd[y]++;
				ad.pop();
			}
			else
			if(nqd<n)
			{
				nqd++;
				qd.push(M(-fld[i].b,nqd));
				nd[nqd]++;
			}
			else
			continue;
		}
	}
	int maxx=0;
	for(int i=1;i<=n;++i)
	{
		ni[i]+=ni[i-1];
		nd[i]+=nd[i-1];
	}
	for(int i=0;i<=n;++i)
	{
		maxx=max(maxx,ni[i]+nd[n-i]);
	}
	cout<<maxx;
	return 0;
}
2021/11/3 13:11
加载中...