求调,为什么RE
查看原帖
求调,为什么RE
399650
STUDYING0601楼主2021/10/24 12:05
#include<bits/stdc++.h>
using namespace std;
int n,m1,m2,sum1[100005]={0},sum2[100005]={0},cnt1[100005],cnt2[100005],r1[100005]={0},r2[100005]={0};
int Mx1=0,Mx2=0,limit1=0,limit2=0,ans=0;
struct airplane1{
	int l,r;
}in[100005];
struct airplane2{
	int l,r;
}out[1000005];
bool cmp1(airplane1 a,airplane1 b){
	return a.l<b.l;
}
bool cmp2(airplane2 a,airplane2 b){
	return a.l<b.l;
}
int main(){
//	freopen("airport.in","r",stdin);
//	freopen("airport.out","w",stdout);
	cin>>n>>m1>>m2;
	for(int i=1;i<=m1;i++){
		cin>>in[i].l>>in[i].r;
		sum1[in[i].l]++;
		sum1[in[i].r+1]--;
		Mx1=max(Mx1,in[i].r);
	}
	for(int i=1;i<=m2;i++){
		cin>>out[i].l>>out[i].r;
		sum2[out[i].l]++;
		sum2[out[i].r+1]--;
		Mx2=max(Mx2,out[i].r);
	}
	sort(in+1,in+m1+1,cmp1);
	sort(out+1,out+m2+1,cmp2);
	for(int i=1;i<=Mx1;i++){
		sum1[i]+=sum1[i-1];
		limit1=max(limit1,sum1[i]);
	}
	for(int i=1;i<=Mx2;i++){
		sum2[i]+=sum2[i-1];
		limit2=max(limit2,sum2[i]);
	}
	cnt1[limit1]=m1;
	cnt1[0]=0;
	cnt2[limit2]=m2;
	cnt2[0]=0;
	for(int i=limit1;i<=n;i++)cnt1[i]=m1;
	for(int i=limit2;i<=n;i++)cnt2[i]=m2;
	for(int i=1;i<=m1;i++){
		for(int j=1;j<limit1;j++){
			if(r1[j]<in[i].l){
				r1[j]=in[i].r;
				cnt1[j]++;
				break;
			}
		}
	}
	for(int i=1;i<=m2;i++){
		for(int j=1;j<limit2;j++){
			if(r2[j]<out[i].l){
				r2[j]=out[i].r;
				cnt2[j]++;
				break;
			}
		}
	}
	for(int i=1;i<limit1;i++)cnt1[i]+=cnt1[i-1];
	for(int i=1;i<limit2;i++)cnt2[i]+=cnt2[i-1];
	for(int i=0;i<=n;i++){
		ans=max(ans,cnt1[i]+cnt2[n-i]);
	}
	cout<<ans<<endl;
	return 0;
}

2021/10/24 12:05
加载中...