P15107 【模板】Wavelet Matrix

题目背景

**请注意本题并不寻常的数据范围与时空限制。**

题目描述

给定一个长度为 $n$ 的序列 $a_{1\sim n}$。$m$ 次查询,给定 $op,l,r,k$: - 若 $op=0$,查询区间 $[l,r]$ 内有多少个数小于 $k$。 - 若 $op=1$,查询区间 $[l,r]$ 内第 $k$ 小的数。 强制在线。

输入格式

由于 IO 量过大,数据使用随机生成。你可以使用以下方式获取 $a_{1\sim n}$ 以及每次询问的 $op,l,r,k$: ```cpp typedef unsigned uint; const int MAXN = 4e6 + 10; const uint mask = 0x5f3759dfu; uint seed, lst; inline uint rnd() { seed ^= lst ^ mask; seed ^= seed > 7; seed ^= seed

输出格式

一行一个非负整数,表示所有查询的答案的异或和。

说明/提示

#### 【样例 1 解释】 解密后的输入如下: ```cpp 5 5 3453473247 1341133007 2686835293 4244725722 2878739094 0 3 5 4197138810 1 2 5 2 1 2 3 2 1 1 5 2 1 3 5 3 ``` 其中第一行为 $n,m$,第二行为 $a_{1\sim n}$,接下来 $m$ 行为询问。 #### 【数据范围】 **本题开启捆绑测试。** |$\text{Subtask}$|$n,m\le$|分值| |:-:|:-:|:-:| |$1$|$500$|$10$| |$2$|$5000$|$20$| |$3$|$2\times 10^5$|$30$| |$4$|$4\times 10^6$|$40$| 对于 $100\%$ 的数据,$1\le n,m\le 4\times 10^6$,$0\le seed