zoukankan      html  css  js  c++  java
  • 区间中位数两例

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

    hihoCoder #1849 子数组的中位数

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

    代码

    ABC107 Task D. Median of Medians

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

    代码

  • 相关阅读:
    字符串分割并按大小排序
    为人之气
    RMQ
    线段树
    算法中的数学
    动态规划(DP)
    图的表示
    广度优先搜索(BFS)
    深度优先搜索(DFS)
    MyBatis(3.2.3)
  • 原文地址:https://www.cnblogs.com/Patt/p/11867770.html
Copyright © 2011-2022 走看看