题意:
有$n$个元素,第$i$个元素有$a_{i},b_{i},c_{i}$三个属性,设$f(i)$表示满足 $a_j \leq a_i,b_j \leq b_i,c_j \leq c_i$
对于 $d \in [0, n)$求$f(i) = d$的数量
三位偏序模板题。
- 1、将已经读入好的数据按照某关键字排序
- 2、设当前区间为[l,r],递归处理左区间[l,mid]和右区间[mid+1,r],计算左区间的修改操作对右区间的影响(一般用树状数组等数据结构维护)
- 3、清除数据结构内的修改数据
是CDQ分治的经典题型
通过对$a_i$的排序,可以把其降低为二维,所以对一个元素,比他都小的元素必定在他之后。
对于$(l,r)$区间,我们分成$(l,mid),(mid+1,r)$ 左区间$a_i$一定比右区间小。然后我们对两个区间进行二维约束的排序。
计算左边区间对右边区间的贡献,保证了一维二维的条件下,只要用线段树查询满足条件左区间$c_i$的数量就好了。
代码
1 |
|