目录
问题引入
陌上花开1
若干个元素有三个属性 a , b , c a,b,c a,b,c,问多少对数对 ( i , j ) (i,j) (i,j)满足 a i ≤ a j , b i ≤ b j , c i ≤ c j a_i\leq a_j , b_i\leq b_j , c_i\leq c_j ai≤aj,bi≤bj,ci≤cj
分析
如此类问题可以视为一个多维偏序问题,偏序即满足自反性,反对称性,传递性。画成拓扑图则可被视为一张DAG。
考虑这个问题的简单版本,如果只有一个属性,可以容易得到;如果有两个属性,常见的解决方案是对其中一维排序后,树状数组维护前缀,按照某一位以每个元素log的复杂度顺序处理。
在维度更高的情况下,cdq分治是简化问题的一个有效手段。
cdq分治的核心思想即以一个log为代价,降低此类多维偏序一个维度。
预备知识
偏序和全序
偏序即满足:自反性,反对称性,传递性的二元关系。
全序即满足:完全性,反对称性,传递性的二元关系。
两者唯一的区别是第一个性质,但是不难发现,自反性即 ∀ x s . t . x R x \forall x\ \ s.t. \ \ xRx ∀x s.t. xRx
完全性即 ∀ x , y s . t . x R y \forall x,y\ \ s.t. \ \ xRy ∀x,y s.t. xRy
即偏序只要自己和自己可比即可,全序则是集合内任意两个元素可比。
像我们处理了如例题陌上花开1的多属性比较关系,往往是偏序的,因为可能出现 a i > b j , b i < b j a_i>b_j,b_i<b_j ai>bj,bi<bj的情况,两者不可比。而自然数集上的大小关系往往可以被视为全序关系,因为任意两个自然数都可比。
引申一点,在全序关系上我们引入良序的定义:若一个全序集上任意一个非空子集S都有最小元,则称其为良序。
逆序对
求逆序对个数事实上可以被视为一个二位偏序的统计问题。对于序列A上每一个元素 a i a_i ai都有两个属性,位置 i i i</