给定数组 $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$ 的区间有多少个。

代码

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-13
  • 2021-10-17
  • 2021-09-04
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-08
  • 2022-12-23
  • 2021-11-28
  • 2022-12-23
  • 2021-09-15
  • 2021-09-09
相关资源
相似解决方案