CodeForces 1285E Delete a Segment

Description CodeForces 1285E

描述

给一个数轴上的 $n$ 条线段,第 $i$ 条覆盖了 $[l_i, r_i]$(如果 $l_i = r_i$ 的话就是一个点)。一个线段集的 并集 是一个与原线段集所覆盖点一样的线段集,例如 $n = 5$,$5$ 条线段分别为 $[1,2]$,$[2,3]$,$[4,5]$,$[4,6]$,$[6,6]$,那么它们的 并集 就是 $[1,3]$ 和 $[4,6]$ 两条线段。现在,你要求出 正好删去一条线段后并集 最多包括多少条线段。

如果两条线段重合,你依然只能删去一条。

输入

第一行是一个正整数 $t(1 \le t \le 10^4)$,表示数据组数。

每组数据的第一行是一个正整数 $n(2 \le n \le 2 \cdot 10^5)$,接下来 $n$ 行每行两个整数 $l_i, r_i(-10^9 \le l_i, r_i \le 10^9)$,含义如描述所示。

输出

对于每组数据输出一个数,表示 正好删去一条线段后并集 最多包括多少条线段。

样例

输入

3
4
1 4
2 3
3 6
5 7
3
5 5
5 5
5 5
6
3 3
1 1
5 5
1 5
2 2
4 4

输出

2
1
5

解释

样例 1 解释:

  • 删去 $[1,4]$,剩下 $[2,3]$,$[3,6]$,$[5,7]$,并集 大小为 $1$;
  • 删去 $[2, 3]$,剩下 $[1, 4]$,$[3,6]$,$[5,7]$,并集 大小为 $1$;
  • 删去 $[3, 6]$,剩下 $[1, 4]$,$[2, 3]$,$[5,7]$,并集 大小为 $2$;
  • 删去 $[5, 7]$,剩下 $[1, 4]$,$[2, 3]$,$[3, 6]$,并集 大小为 $1$。

故输出为 $2$。

Solution

看到负数,首先考虑 离散化,然后就很自然地想到用 $d_i$ 来表示坐标(离散化后)为 $i$ 的点被几条线段覆盖,然后姑且不说删去一条线段,就是原线段集的 并集 怎么求呢?

画个图看看(图中为了防止线段重叠将线段进行了竖直平移,一条线段的实际覆盖区域即为其竖直投影):

简单!连续非零段的个数就是 并集 大小!

真的是这样吗?

似乎……不太对?

于是就有了一种神仙的方法:既然我们的标号都在点上,第二张图不能很好处理,那么,我们给边也来个 $d$!

怎么实现呢?只要把所有的 $l_i, r_i$ 都 $\times 2$ 即可!

于是我们就能很好地处理了:

那么 $\mathcal O(n^2)$ 的做法就呼之欲出了:删去线段 $i$ 时,就把 $[l_i, r_i]$ 的 $d$ 都减去 $1$,然后重新统计一遍求最大值!

猜你喜欢

转载自www.cnblogs.com/syksykCCC/p/CF1285E.html