「JOISC 2017 Day 1」港口设施

传送门

显然时间相交的货物不能在一个栈中,在其间连边,求的是二分图染色数。

考虑优化连边,按照右端点排序。

每次需要与左端点在 \((a_i,b_i)\) 内的货物连边,也就是染成相同颜色,然后将 \(a_i\) 在左端点集合中删去。

任意时刻,集合中同色的货物的左端点是连续的一段。

连边时,已经同色货物中只需连一条边,所以需要维护 \(nex_i\) :与左端点为 \(i\) 同色的货物的最大左端点。

因为要删点,可以用并查集维护 \(fa_i\) :左端点为 \(i\) 的货物右边第一个未删除的货物。

每次操作从左往右扫,每扫到一个同色段就将 \(nex\) 设为集合中最大的左端点,在跳到下一个同色块,并将 \(fa_i\) 设为 \(fa_{i + 1}\) 即可。

跳同色段的过程与并查集路径压缩是类似的,所以复杂度为 \(O(n\log n)\)。

代码

上一篇:格拉姆-施密特正交化--QR分解法的来源(三)


下一篇:模板注释