高考是不可能高考的 国家集训队作业题

高考是不可能高考的

Description

给出 N 个旗子,全部旗子摆在一条线上。
i 个旗子可以被放在位置 xi yi 上.
LYD 认为两个旗子间的最小距离越大越好。
请你求出最大值。

Data Constraint

1 <= N <= 104 1 <= xi , yi <= 109

Solution

做过这题后便发现国家集训队的作业题其实也没那么难。
其实模型也挺裸的,就是 2 - SAT 问题。
一个显然的解题方向,就是要先二分答案。
然后将所有的 xi yi 全部放在一条数轴上。
定义 xi 的对立点为 yi yi 的对立点为 xi
考虑对于一个点,如果选择数轴上的某个点 B ,那么若存在某个点 A A B 的距离小于二分的答案,那么 B 要向 A 对立点 连一条边,表示如果选择了 B ,就一定要选择 A 的对立点。
建出 2 - SAT 模型后,跑一边 Tarjan 求强连通分量,若存在( xi , yi ), xi yi 在同一个强连通分量内,则说明这答案是不合法的,否则就是合法的。

但这样连边是 O ( N2 )的,边数也能达到 N2 级别,因而这种方法行不通。
我们发现只需判断两点是否在同一个连通块内,并不要求方案,因而 N2 连边可以说是多余的。
考虑用线段树,对于线段树上的每个区间往它的两个儿子连边。
对于每一个点,它连的点都在一段区间内,因而每一个点可以跟它对应的 log N 个区间连边,最后一样的方法判连通性即可。

你可能感兴趣的:(线段树,2-SAT)