• 【专题】偏序,扫描线


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

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

    【扫描线】

    二维数点,偏序

    数点问题

    关于偏序问题的一些总结

    扫描线是一维离线的做法的统称,常用于解决k维偏序问题。

    离线:将其中一维的询问排序后按顺序处理,从而实现按时间顺序处理的过程中可以O(1)统计空间上小于某个数字的答案。

    将一维离线称为扫描线,就是因为离线的那维处理过程很像一条线按顺序扫描。

    偏序:以二维偏序为例,对于任意(x,y),必须满足x<=A&&y<=B,也就是有两个单向限制,则是二维偏序。

    扫描线解决k维偏序问题是经典中的经典。

    一维偏序:排序扫描线  树状数组

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

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

    数据结构实际上就是普通的处理一维,排序(离线)后按顺序就是用扫描线特殊的处理一维,k维中只有一维能使用扫描线。

    一维用扫描线后,另一维用树状数组维护前缀和(包括前面行的,每个元素都代表一列),这就是典型的二维偏序问题解法了

    扫描线就是主要用于解决k维偏序问题的,而解决矩阵数点问题完全是利用偏序问题来解决的。

    矩阵可以理解为四个限制(四位偏序),但是两维和另两维之间有直接关系,所以可以差分成四个二维偏序,这样就只要在二维偏序的时候两维分别差分即可。

    例题:

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

    【BZOJ】1537: [POI2005]Aut- The Bus 排序+线段树

    BZOJ 4822: [Cqoi2017]老C的任务 等待解决=v=

    嗷嗷待补:

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

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

    矩阵面积并

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

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

    【链与反链】

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

    大前提:在DAG上(有向无环图)

    链是点的集合,这个集合中任意两点单向可达

    反链是点的集合,这个集合中任意两点互相不可达。

    ★最小链覆盖=最长反链

    最小反链覆盖=最长链

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

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

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

    二分求解LIS:从前往后每个数字在替换掉序列b中第一个>=它的数字(这个数字的位置就是f[i]),如果没有则加在末尾。

    二分过程中一个位置当前和之间的所有数字组成一个不增子序列,位置总数就是最长上升子序列。

    int k=0;
        for(int i=1;i<=n;i++){
            int x=lower_bound(b+1,b+k+1,a[i]+1)-b;
            f[i]=x;
            if(x==k+1)b[++k]=a[i];else b[x]=a[i];
        }
    View Code

    (顺便一提,LIS还可以写树状数组,查询值域前缀max,值域离散化——注意树状数组不能处理ai=0的情况,需整体+1)

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

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

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

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

    NOIP 1999 导弹拦截

    【BZOJ】1143: [CTSC2008]祭祀river

    最长链:偏序转化而来,参考LIS用DP+二分/树状数组。

    链覆盖:floyd传递闭包(转化为可达信息),转化为最小路径覆盖,ans=N-最大匹配(二分图)。

  • 相关阅读:
    MDX函数
    OLAP + MDX
    AIOps指导
    ES Terms 聚合数据不确定性
    redis初步入门
    java写hadoop全局排序
    [工程技巧]
    python与字符集编码
    转载python2进制打包相关
    转载 大端VS小端
  • 原文地址:https://www.cnblogs.com/onioncyc/p/7349552.html
Copyright © 2020-2023  润新知