帮忙找个错吧
查看原帖
帮忙找个错吧
285617
黑影洞人楼主2021/10/25 22:43
#include<cstdio>
#include<algorithm>
#define N 100005
using namespace std;
struct p{
	int a,b;
	int len=b-a+1;
}d[N],e[N]; 
int n,m1,m2,ans,sa1,sb1,sa2,sb2,al1,al2,k1,k2;
bool cmp(p a,p b){
	if(a.b-a.a+1==b.b-b.a+1)return a.a<b.a;
	return (a.b-a.a+1)<(b.b-b.a+1);
}
bool check(int a,int b){
	if((sa2-sa1+1)==(b-a+1))al1++;
	if((sa2-sa1+1)<(b-a+1))al1=0;
	return (sa2-sa1+1)<(b-a+1);
}
bool cxk(int a,int b){
	if((sb2-sb1+1)==(b-a+1))al2++;
	if((sb2-sb1+1)<(b-a+1))al2=0;
	return (sb2-sb1+1)<(b-a+1);
}
signed main(){
	scanf("%d%d%d",&n,&m1,&m2);
	for(int i=1;i<=m1;i++){
		scanf("%d%d",&d[i].a,&d[i].b);
		int a=d[i].a,b=d[i].b,c=d[i-1].a,e=d[i-1].b;
		if(a>=c&&b<=e){
			if(check(a,b))sa1=a,sa2=b;
		}
		if(a<=c&&b>=e){
			if(check(c,e))sa1=c,sa2=e;
		}
		if(a<c&&b>c&&b<e){
			if(check(c,b))sa1=c,sa2=b;
		}
		if(a>c&&a<e&&b>e){
			if(check(a,e))sa1=a,sa2=e;
		}
	}
	for(int i=1;i<=m2;i++){
		scanf("%d%d",&e[i].a,&e[i].b);
		int a=e[i].a,b=e[i].b,c=e[i-1].a,d=e[i-1].b;
		if(a>=c&&b<=d){
			if(cxk(a,b))sb1=a,sb2=b;
		}
		if(a<=c&&b>=d){
			if(cxk(c,d))sb1=c,sb2=d;
		}
		if(a<c&&b>c&&b<d){
			if(check(c,b))sb1=c,sb2=b;
		}
		if(a>c&&a<d&&b>d){
			if(check(a,d))sb1=a,sb2=d;
		}
	}
	k1=sa2-sa1+1,k2=sb2-sb1+1;
	for(int i=0;i<=n;i++){
		ans=max(ans,m2+m1-k1-k2);
	}
	printf("%d",ans);
	return 0;
}



2021/10/25 22:43
加载中...