一眼看到题,马上想到线段树,不想离散化,又只有一维,果断矩形分割RE,原因未考虑线段未相交情况,加上后AC结果在DISCUSS里看到了这么一句It is confirmed that these sections do not overlap with each other. 马上囧了要认真读题啊#include<stdio.h>int line
[5005*4][2];int m
;voidAdd(int a
,int b
){++m
; line
[m
][0]=a
; line
[m
][1]=b
;}voidDelete(int&i
){ line
[i
][0]=line
[m
][0]; line
[i
][1]=line
[m
][1];--m
;}intmain(){int L
,M
;while(scanf("%d%d",&L
,&M
)){if(!L
&&!M
)break; m
=-1;int a
,b
;while(M
--){scanf("%d%d",&a
,&b
);int mm
=m
;for(int i
=0;i
<=mm
;i
++){if(!((line
[i
][0]>=b
)||(line
[i
][1])<=a
)){if(line
[i
][0]<a
)Add(line
[i
][0],a
-1);// 每个点不能重复算,所以线段不相交要加强到if(b
<line
[i
][1])Add(b
+1,line
[i
][1]);// 点不相交Delete(i
);}}Add(a
,b
);}for(int i
=0;i
<=m
;i
++) L
-=(line
[i
][1]-line
[i
][0]+1);printf("%d/n",L
+1);}}
其实区间是不互相覆盖的
#include<stdio.h>intmain(){int L
,M
,a
,b
;while(scanf("%d%d",&L
,&M
)&&L
){while(M
--){scanf("%d%d",&a
,&b
); L
-=(b
-a
+1);}printf("%d/n",L
+1);}}