题目链接:点击打开链接
题目大意:略。
解题思路:区间合并技巧:先按 L 升序,如果一样,按 R 升序;排序完之后,从头开始相邻之间比较:如果 L2 在 (L1,R1) 内且 R2 大于 R1,则进行合并;否则进行计数并维护 L1、R1。
AC 代码
usingnamespacestd; typedeflonglongll; structnode{ intl,r; }nds[120]; intcmp(noden1,noden2) { returnn1.l==n2.l?n1.r<n2.r:n1.l<n2.l; } intmain() { intn,m,l1,r1,l2,r2,rs; while(~scanf("%d%d",&n,&m) &&n&&m) { rs=0; for(inti=0;i<m;i++) scanf("%d%d",&nds[i].l,&nds[i].r); sort(nds,nds+m,cmp); l1=nds[0].l, r1=nds[0].r; rs+=l1-0; for(inti=1;i<m;i++) { l2=nds[i].l, r2=nds[i].r; if(l2<=r1&&r2>r1) r1=r2; elseif(l2>r1) { rs+=l2-r1-1; l1=l2; r1=r2; } } rs+=n-r1; printf("%d\n",rs); } return0; }