编程题
### 问题描述
给定一个数组 $A=\left(a_1, a_2, \cdots, a_n\right)$, 请对该数组执行 $m$ 次修改或查询操作: 若操作为 $1 x y$, 表示将 $a_x$ 的值修改为 $y$;
若操作为 $2 l r p$ 表示求 $a_p$ 在 $a_l, a_{l+1}, \cdots, a_r$ 中是第几小的(比 $a_p$ 小的元 素个数加 1)。
### 输入格式
输入的第一行包含一个整数 $n$ 。
第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$, 表示数组中每个数的初始值, 相邻的 整数之间用一个空格分隔。
第三行包含一个整数 $m$ 。
接下来 $m$ 行每行包含一个操作, 可能是 $1 x_i y_i$ 或 $2 l_i r_i p_i$, 相邻的整数之 间用一个空格分隔。
### 输出格式
输出一行, 包含多个整数, 相邻的整数之间用一个空格分隔, 依次表示第 二种操作的答案。
### 样例输入
```text
3
1 2 3
3
2 1 3 2
1 2 4
2 1 3 2
```
### 样例输出
```text
2 3
```
### 评测用例规模与约定
对于 $20 \%$ 的评测用例, $n \leq 500$ ;
对于 $40 \%$ 的评测用例, $n \leq 5000$;
对于所有评测用例, $1 \leq n \leq 100000,1 \leq m \leq 2 n, 1 \leq a_i, y_i \leq 10^6$, $1 \leq x_i \leq n, \quad 1 \leq l_i \leq p_i \leq r_i \leq n \circ$