所谓偏序就是当你知道元素A,B,C时,元素A<B,且A<C,但是B和C之间的关系却无法比较的现象 在ACM中,这种类型的题目通常会告诉我们n个数组,每个元素的各属性对应于不同数组的同一位置的值 询问通常是回答比这元素小的有几个,或者是LIS这样的dp问题。 而解决偏序问题通常有以下方法:排序,数据结构(树状数组,线段树,平衡树),cdq分治,分块。 接下来简单介绍关于维数不同的偏序该采用什么策略。 一维:这个其实不能叫做偏序,一维是全序的,这种情况只要直接排序就可以解决,当然使用数组结构也可以。 二维:先对第一维排序,然后第二维可以用cdq分治,也可以使用数据结构维护。 三维:同上,第一维要排序,然后可以两重cdq分治,cdq分治+数据结构,线段树或树状数组套平衡树 四维:一维排序,然后两重cdq分治+数据结构,或者cdq分治+线段树或树状数组套平衡树 五维:一维排序,然后两重cdq分治+线段树或树状数组套平衡树 以上方法的效率基本是每上一维多一个log,但是空间基本都是nlog(n)的,数据大的话到五维可能就超时了 关于不同方案间的优劣的话,排序是必须的,直接调用c++的快排即可,数据结构之间树状数组是最值得使用 的,常数小而