$Norma$
$Description$
三种情况。
$1. j \in [mid + 1, p)$
区间最值就是当前求出来的最值,所以直接累计高斯公式求和就好了。
$$
min \times max \times \sum_{j = mid + 1}^{p - 1} j - i + 1
$$
$2. j \in [p, q)$
区间最大值还是当前的 $max$ ,只是当前的区间最小值变了,因为你的 $j$ 包含了比 $min$ 更小的值。
所以要预处理一个前缀最小值 $mns$ ,并记录 $mns \times j$ 的前缀和 $mnp$ 。
如此可以得到式子
$$
max \times \sum_{j = p}^{q - 1} mns_j \times (q - p + 1)
$$
化简得
$$
max \times \sum_{j = p}^{q - 1} mns_j \times q - max \times \sum_{j = p}^{q - 1} mns_j \times (i - 1)
$$
$3. j \in [q, r]$
对于这种情况,区间的最大值和最小值都改变了,所以要处理 $max \times min$ 以及 $max \times min \times j$ 的前缀和,然后再做。
这种情况与第二种情况其实类似,所以记 $max \times min$ 的前缀和为 $mnx$ , $max \times min \times j$ 的前缀和为 $sum$ ,就有
$$
max \times \sum_{j = p}^{q - 1} mnx_j \times (q - p + 1)
$$
一样的化简套路,得
$$
max \times \sum_{j = p}^{q - 1} mnx_j \times q - max \times \sum_{j = p}^{q - 1} mnx_j \times (i - 1)
$$
考虑右边区间对于左边的影响,令 $p, q$ 指针单调移动, $CDQ$ 分治即可,复杂度 $O(n\ log\ n)$ 。
$Code:$
1 |
|