题意
长度为 \(10^6\) 的圆周上,有 \(n\) 个弧,第 \(i\) 条按照顺时针方向从 \(l_i\) 到 \(r_i\)
构建这样一个图:如果弧 \(i\) 和弧 \(j\) 有交,则他们之间连一条无向边。求出这个图的最大团大小
解法
考虑一个团中最短的那条弧
注意到团内的弧一定会经过它的左右端点中的至少一个(否则要么根本不交要么就是包含了更小的弧)。可能作为团内点的弧关于端点有三种情况:
- 同时经过两个端点:选就完事了
- 只经过左端点
- 只经过右端点
记集合 \(A\) 为只经过左端点的弧,\(B\) 为只经过右端点的弧,同集合内的点显然连通
记最短弧的长度为 \(T\),记 \(u_i\) 为弧 \(i\) 与最短弧的交的长度,\(v_i\) 为在最短弧外的长度。那么 \(a \in A\) 和 \(b \in B\) 不连通的条件:\(u_a+u_b<T\) 且 \(v_a+v_b<10^6-T\),也就是 \(u_a<T-u_b\) 且 \(v_a<10^6-T-v_b\)
把 \(a \in A\) 看成平面上的点 \((u_a,v_a)\),\(b \in B\) 看成 \((T-u_b,10^6-T-v_b)\),那么合法的方案要求不存在一个 \(A\) 内的点在 \(B\) 内的点的左下方
假设已经确定了 \(B\) 中选的点,可以发现合法的 \(A\) 内点都在一个阶梯状划分线上方,所有的 \(B\) 点都在划分线下方
在 DP 时维护这个划分线即可,可以用线段树优化到 \(O(n \log n)\)