15pts求调
查看原帖
15pts求调
534025
gmllsswzw楼主2022/9/22 23:22
#include<bits/stdc++.h>
using namespace std;
int n,m1,m2,anss[100005],m,ans,p,q,ans1[100005],ans2[100005],len1,len2,mm,temp,Ans[100005],tot=1;
set< pair<int,int> >s1;
set< pair<int,int> >s2;
set< pair<int,int> > ::iterator it;
struct AB{
	int a,b;
};
AB mm1[100005];	AB mm2[100005];
bool cmp(AB x,AB y){
	return x.a<y.a;
}
int main(){
//	freopen("airport3.in","r",stdin);
//	freopen("airport3.out","w",stdout);
	scanf("%d%d%d",&n,&m1,&m2);
	for(int i=1;i<=m1;i++)
		scanf("%d%d",&mm1[i].a,&mm1[i].b);
	for(int i=1;i<=m2;i++)
		scanf("%d%d",&mm2[i].a,&mm2[i].b);
	sort(mm1+1,mm1+m1+1,cmp);
	sort(mm2+1,mm2+m2+1,cmp);
	for(int i=1;i<=m1;i++){
		int aa=mm1[i].a,bb=mm1[i].b;
		if(!s1.size()){
			s1.insert(make_pair(bb,++len1));
			ans1[len1]++;
		}
		else{
			it=s1.lower_bound(make_pair(aa,0));
			if(it==s1.begin()){
				s1.insert(make_pair(bb,++len1));
				ans1[len1]++;
				continue;
			}
			it--;
			int x=it->second;
			s1.erase(it);
			s1.insert(make_pair(bb,x));
			ans1[x]++;
		}
	}
	for(int i=1;i<=m2;i++){
		int aa=mm2[i].a,bb=mm2[i].b;
		if(!s2.size()){
			s2.insert(make_pair(bb,++len2));
			ans2[len2]++;
		}
		else{
			it=s2.lower_bound(make_pair(aa,0));
			if(it==s2.begin()){
				s2.insert(make_pair(bb,++len2));
				ans2[len2]++; 
				continue;
			}
			it--;
			int x=it->second;
			s2.erase(it);
			s2.insert(make_pair(bb,x));
			ans2[x]++;
		}
	}
	for(int i=len1;i;i--)
		anss[++m]=ans1[i];
	for(int i=1;i<=len2;i++)
		anss[++m]=ans2[i];
	for(int i=max(1,len1-n+1);i<=min(len1+len2,len1+n);i++){
//		cout<<anss[i]<<endl;
		if(temp<n){
			Ans[1]+=anss[i];
			temp++;
		}
		else{
			Ans[++tot]=Ans[tot-1]+anss[i]-anss[i-n];
		}
	}
	sort(Ans+1,Ans+1+tot);
	ans=Ans[tot];
	for(int i=1;i<=m;i++)
		cout<<anss[i]<<endl;
	for(int i=1;i<=tot;i++)
		cout<<Ans[i]<<endl;
	printf("%d",ans);
	return 0;
}
2022/9/22 23:22
加载中...