首页 > 代码库 > 【专题】偏序,扫描线

【专题】偏序,扫描线

【关键字】偏序,数点,树状数组,线段树,扫描线。

因为涉及多种算法,所以整合到一起。

【扫描线】

二维数点,偏序

★数点问题

★关于偏序问题的一些总结

一维偏序:排序二分  树状数组

二维偏序:排序扫描线+树状数组(差分)/线段树

三维偏序:排序扫描线+cdq分治+树状数组  排序扫描线+二维数据结构

基本思想是一维扫描线顺序扫描维护差分,一维用数据结构维护区间(线段树维护区间,树状数组差分维护前缀和)。

[BZOJ3161]布娃娃(扫描线+线段树)

BZOJ 4059 Cerc2012 Non-boring sequences 线段树+扫描线

矩阵面积并

hdu 1542 扫描线+线段树求矩阵面积并

线段树辅助——扫描线法计算矩形面积并

例题:

【STSRM13】绵津见 二维偏序,排序+树状数组

 

【链与反链】

引用自:最长反链与最小链覆盖 by vfleaking

链是点的集合,这个集合中任意两个元素v、u,要么v能走到u,要么u能走到v。

反链是点的集合,这个集合中任意两点谁也不能走到谁,可以理解为有向边取反后的链。

★最小链覆盖=最长反链

最小反链覆盖=最长链

经典模型:最少严格递减子序列覆盖=最长不严格递增子序列

     最少不严格递增子序列覆盖=最长严格递增子序列(链与反链的互补关系)

不严格证明:从二分n log n求LIS的过程中可以得到一组合法解。

二分求解LIS的原理是数字依次添加,缺数字加数(ans+1),不缺数字替换掉第一个比它大(或等)的数字。

二分过程中一个位置被替换的所有数字(包括当前的数字)组成一个递减子序列,位置总数就是最长上升子序列。

这样替换的正确性在于:访问某位置时,其前面的位置一定存在数字在该位置之前(反证:若不存在,则一定会替换该位置),这样传递下去可以找到上升子序列。

技术分享View Code

最长上升子序列(LIS)本质上是二维偏序,要求满足a[i]<a[j]&&h[i]<h[j]的最长序列。

也可以视为二分图不交叉最大匹配(上帝选人):一维排序(a[i]),一维可以树状数组维护DP,也可以二分。

链模型转化:对于所有满足满足a[i]<a[j]&&h[i]>h[j]的点i和点j连接有向边,最长链覆盖=最长反链。

NOIP 1999 导弹拦截

CTSC2008 祭祀

 

【专题】偏序,扫描线