其他分享
首页 > 其他分享> > 区间中位数两例

区间中位数两例

作者:互联网

给定数组 $a_1, a_2, \dots, a_N$。

hihoCoder #1849 子数组的中位数

中位数数定义为排序后第 $\floor{(N+1)/2}$ 个数。
中位数大于 $k$ 等价于数组中大于等于 $k$ 的数超过一半。
定义数组 $b_1, b_2, \dots, b_N$,
\begin{aligned}
b_i :=
\begin{cases}
1, & \text{if $a_i \ge k$}, \\
-1, & \text{if $a_i < k$}.
\end{cases}
\end{aligned}
区间 $a_l, \dots, a_r$ 的中位数大于等于 $k$ 等价于 $\sum_{i = l}^{r} b_i > 0$。
利用数状数组可在 $O(N\log N)$ 的时间内算出中位数大于等于 $k$ 的区间有多少个。

代码

ABC107 Task D. Median of Medians

中位数定义为排序后第 $\floor{N/2} + 1$ 个数。
中位数 $\le k$ 等价于数组中小于等于 $k$ 的数超过一半。
定义数组 $b_1, b_2, \dots, b_N$,
\begin{aligned}
b_i :=
\begin{cases}
1, & \text{if $a_i \le k$}, \\
-1, & \text{if $a_i > k$}.
\end{cases}
\end{aligned}
区间 $a_l, \dots, a_r$ 的中位数小于等于 $k$ 等价于 $\sum_{i = l}^{r} b_i > 0$。
利用数状数组可在 $O(N\log N)$ 的时间内算出中位数小于等于 $k$ 的区间有多少个。

代码

标签:dots,begin,end,两例,text,中位数,数组,区间
来源: https://www.cnblogs.com/Patt/p/11867770.html