具体的题解就看OI-wiki上面的就好了,但是对上面的题解做一些解释
题解首先说按照\(a\)排序,其实是按照\(a\)为第一关键字,\(b\)为第二关键字,\(c\)为第三关键字排序再离散化
为什么要这么做?我们来看一下CDQ分治的具体过程
当\(solve(l,mid)\)和\(solve(mid+1,r)\)解决完后,我们只需要解决点对\((i,j)\)的问题(我们枚举的是\(j\),计算的是\(f(j)\)),其中\(i\)属于\([l,mid]\)且\(j\)属于\([mid+1,r]\)或者\(i\)属于\([mid+1,r]\)且\(j\)属于\([l,mid]\)
我们先来看前一种情况,这种情况就看OI-wiki就好了,上面除了\(≤\)打成了\(<\)没啥错
然后来看第二种情况,由于我们最开始的排序和离散化,此时不可能存在一个数对\((i,j)\)使得\(a_j≥a_i,b_j≥b_i,c_j≥c_i\),所以根本不用考虑第二种情况(所以题解说的离散化是保证时间复杂度的,其实不尽然,其实是保证正确性的);如果最开始只是按照\(a_i\)为关键字排序,可能在某次\(solve\)的区间\([l,r]\)中,原序列(指最开始按照\(a_i\)排序之后的\([l,r]\)而不是在\(solve\)递归之后已经经过\(b_i\)排序后的数组)\([x,mid]\)和\([mid+1,y]\)的元素的\(a\)是相等的,因此第二种情况是可能存在的,但是却没有办法统计了(所以说离散化是保证正确性的)
然后注意最后统计答案的时候,由于我们离散化了,是没有办法统计三个属性值相等的元素之间的互相影响的,因为最后的下标不是\(ue.res\),而是\(ue.res+ue.cnt-1\)
标签:偏序,题解,陌上,三维,mid,离散,关键字,solve,排序 From: https://www.cnblogs.com/dingxingdi/p/18037591