U570080 动态区间中位数查询与更新
题目描述
给定一个初始长度为 $N$ 的整数数组 $A$,需要处理以下两种操作:
1. 更新操作 `U i x`:将下标为 $i$ 的元素 $A_i$ 更新为 $x$。
2. 查询操作 `Q l r`:查询区间 $[l, r]$ 的中位数。中位数定义为:将该区间内的所有数从小到大排序后,位于中间位置的数(如果区间内元素个数为偶数,则取中间两个数中较小的那个)。
请设计一个高效的数据结构,支持这两种操作。
输入格式
- 第一行输入两个整数 $N$ 和 $M$,分别表示数组初始长度和操作次数。
- 第二行输入 $N$ 个整数,表示初始数组 $A$。
- 接下来 $M$ 行,每行一个操作,格式为 `U i x` 或 `Q l r`(下标从 $0$ 开始)。
输出格式
- 对于每个查询操作,输出一行,表示查询结果。
说明/提示
#### 样例解释
- 初始数组为 $[1, 2, 3, 4, 5]$,第一次查询区间 $[0, 4]$ 的中位数,排序后为 $[1, 2, 3, 4, 5]$,中位数为 $3$。
- 将 $A_2$ 更新为 10 后,数组变为 $[1, 2, 10, 4, 5]$。
- 第二次查询区间 $[0, 4]$ 的中位数,排序后为 $[1, 2, 4, 5, 10]$,中位数为 $4$。
#### 数据范围
- $1 \leq N, M \leq 10^5$
- 数组元素和更新值均为整数,且在 $32$ 位整数范围内。
- $0 \leq i \leq N-1$, $0 \leq l \leq r \leq N-1$