编程题
### 问题描述
给你一个长度为 $n$ 的数列 $a_1, a_2, ..., a_n$ 和 $m$ 次操作,每次操作有以下三种:
1. 修改:给定 `l, r, x`,将区间 $[l, r]$ 内的所有数加上 $x$。
2. 赋值:给定 `l, r, x`,将区间 $[l, r]$ 内的所有数赋值为 $x$。
3. 查询:给定 `l, r, y`,查询区间 $[l, r]$ 的第 $y$ 小的值(如果有多个相同数字需要计算多次)。
请你实现这三种操作。
### 输入格式
第一行包含两个整数 $n$ 和 $m$,表示数列的长度和操作的次数。
第二行包含 $n$ 个整数 $a_1, a_2, ..., a_n$。
接下来的 $m$ 行,每行描述一个操作,格式如下:
- `1 l r x`:表示一个修改操作。
- `2 l r x`:表示一个赋值操作。
- `3 l r y`:表示一个查询操作。
### 输出格式
对于每个查询操作,输出一个整数,表示查询的结果。
### 样例输入
```
5 3
1 2 3 4 5
1 1 3 2
2 3 5 1
3 1 5 4
```
### 样例输出
```
3
```
### 样例说明
在第一次操作后,数列变为:$[3, 4, 5, 4, 5]$。
在第二次操作后,数列变为:$[3, 4, 1, 1, 1]$。
第三次操作查询区间 $[1, 5]$ 的第 $4$ 小的值为 $3$。
### 测评数据规模
对于 $40$% 的数据,$1\le n, m \leq 10$。
对于 $80$% 的数据,$1\le n, m \leq 100$。
对于 $100$% 的数据,$1 \leq n, m \leq 10^3$,$-10^4 \leq a_i, x \leq 10^4$,$1 \leq l \leq r \leq n$,$1\le y\le r-l+1$。