分块套树状数组在特定条件下可以用来做一些树套树可以做的事情,但是相比起树套数,分块套树状数组代码编写更加简短,更加容易实现。
-## 简单的例子 矩形区域查询
+## 简单的例子
一个简单的例子就是二维平面中矩阵区域内点数的查询。
在判断 $i$ 时,将序列视为由零或多个 $i$ 分隔的多个段。如果存在一个段,这个段中包含 $1$ 至 $i - 1$ ,但不包含 $i$ ,那么就说明存在值为 $i$ 的连续子序列。
-用一个数组 $Y_j$ 记录上一个值为 $a_j$ 的元素的位置,以 $j$ 作为 $x$ , $Y_j$ 作为 $y$ , $a_j$ 作为 $z$ 。这样,计算段内是否包含 $1$ 至 $i - 1$ 就是一个三维偏序的问题。形式化的说,判断段 $[l, r]$ 的 MEX 值是否为 $i$ ,就是看满足 $l \le j \le r, Y_j le l - 1, a_j le i - 1$ 的点的个数是否为 $i-1$ 。
+用一个数组 $Y_j$ 记录上一个值为 $a_j$ 的元素的位置,以 $j$ 作为 $x$ , $Y_j$ 作为 $y$ , $a_j$ 作为 $z$ 。这样,计算段内是否包含 $1$ 至 $i - 1$ 就是一个三维偏序的问题。形式化的说,判断段 $[l, r]$ 的 MEX 值是否为 $i$ ,就是看满足 $l \le j \le r, Y_j \le l - 1, a_j \le i - 1$ 的点的个数是否为 $i-1$ 。
如果在判断完值为 $i$ 的元素之后再将对应的点插入,这时因为 $[l, r]$ 内只存在 $a_j \le i - 1$ 的元素,所以上述三维偏序问题就可以转换为二维偏序的问题。