7 条题解

  • 1
    @ 2022-7-17 16:00:29

    就不再考虑优化了,随便贴出来吧,一个比较麻烦的方法,不过这个解法就算是把测试点继续强化也不怕了

    using namespace std;
    int u=0,n,a[131452],b,c,m,cot=0,maxn,mina[1000],maxa[1000],p=1145141,mi[10000],cache,ma[10000];
    int main() {
    	cin>>n;
    	for(int i=0; i<n; i++) {
    		cin>>b>>c;
    		if(b<p) p=b;
    		if(c>maxn) maxn=c;
    		for(int j=b+1000; j<=c+1000; j++) a[j]=1;
    		mi[i]=b+1000,ma[i]=c+1000;
    	}
    	for(int i=p+1000; i<=maxn+1000; i++) {
    		if(a[i]==0) cache++;
    		int iq=-1132,iw=-54154,ip=0;
    		for(int j=0; j<n; j++) {
    			if(mi[j]==i) 
    				iq=mi[j];
    			if(ma[j]<i&&ma[j]>iw) 
    				iw=ma[j],u=j;
    		}
    		for(int j=0; j<n; j++) {
    			if((mi[j]<i&&ma[j]>=i)||(mi[j]<=i&&ma[j]>i)) 
    				ip=1;
    		}
    		if(a[i]!=0&&a[i-1]==1) {
    			ip=0;
    			for(int j=0; j<n; j++) {
    				if((mi[j]<mi[u]&&ma[j]>=ma[u])||(mi[j]<=mi[u]&&ma[j]>ma[u])) {
    					ip=1;
    					break;
    				}
    			}
    			if(i-1==iw&&i==iq&&ip==0) {
    				maxa[cot]-=cache;
    				cache=0,cot++,mina[cot]=i-1000;
    			}
    		}
    		else if((a[i]!=0&&a[i-1]==0)) {
    			bool rtx=false;
    			for(int o=0; o<n; o++) 
    				if(i>=mi[o]&&i<=ma[o]) rtx=true;
    			if(rtx==true) {
    				maxa[cot]-=cache;
    				cache=0;
    				cot++;
    				if((a[i]!=0&&a[i-1]==0)||(a[i]!=0&&i==p+1000)) mina[cot]=i-1000;
    			}
    		} 
    		if(maxa[cot]<i) maxa[cot]=i-1000;
    	}
    	cout<<cot<<endl;
    	for(int i=1; i<=cot; i++) 
    		cout<<mina[i]<<" "<<maxa[i]<<endl;
    	return 0;
    }
    

    信息

    ID
    735
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    902
    已通过
    124
    上传者