95pts,仅WA on #9,求救,玄二关
查看原帖
95pts,仅WA on #9,求救,玄二关
1202695
Junior_Young楼主2025/1/6 17:46

真·百行代码(整整100行):

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a1[N],b1[N],f1[2*N],ans1[N],asw1[N],a2[N],b2[N],f2[2*N],ans2[N],asw2[N];
int n,m1,m2;
priority_queue<int,vector<int>,greater<int> > pq1,pq2,p1,p2;
map<int,pair<int,bool> > mp1,mp2;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m1>>m2;
	for(int i=1;i<=m1;i++)
	{
		cin>>a1[i]>>b1[i];
		mp1[a1[i]]={i,0};
		mp1[b1[i]]={i,1};
		pq1.push(a1[i]);
		pq1.push(b1[i]);
	}
	for(int i=1;i<=2*m1;i++)
	{
		f1[i]=pq1.top();
		pq1.pop();
	}
	int Now1=0;
	for(int i=1;i<=2*m1;i++)
	{
		if(mp1[f1[i]].second==0)
		{
			if(p1.empty()||p1.top()>Now1+1)
			{
				ans1[mp1[f1[i]].first]=Now1+1;
			}
			else
			{
				ans1[mp1[f1[i]].first]=p1.top();
				p1.pop();
			}
			++Now1;
		}
		else
		{
			p1.push(ans1[mp1[f1[i]].first]);
			Now1--;
		}
	}
	for(int i=1;i<=m1;i++)
	{
		asw1[ans1[i]]++;
	}
	for(int i=1;i<=m1;i++)
	{
		asw1[i]+=asw1[i-1];
	}
	for(int i=1;i<=m2;i++)
	{
		cin>>a2[i]>>b2[i];
		mp2[a2[i]]={i,0};
		mp2[b2[i]]={i,1};
		pq2.push(a2[i]);
		pq2.push(b2[i]);
	}
	for(int i=1;i<=2*m2;i++)
	{
		f2[i]=pq2.top();
		pq2.pop();
	}
	int Now2=0;
	for(int i=1;i<=2*m2;i++)
	{
		if(mp2[f2[i]].second==0)
		{
			if(p2.empty()||p2.top()>Now2+1)
			{
				ans2[mp2[f2[i]].first]=Now2+1;
			}
			else
			{
				ans2[mp2[f2[i]].first]=p2.top();
				p2.pop();
			}
			++Now2;
		}
		else
		{
			p2.push(ans2[mp2[f2[i]].first]);
			Now2--;
		}
	}
	for(int i=1;i<=m2;i++)
		asw2[ans2[i]]++;
	for(int i=1;i<=m2;i++)
		asw2[i]+=asw2[i-1];
	int ANS=-114514;
	for(int i=0;i<=n;i++)
		ANS=max(ANS,asw1[i]+asw2[n-i]);
	cout<<ANS;
	return 0;
}

锰锌求dalao指教~

2025/1/6 17:46
加载中...