#P51620. 「2017 山东三轮集训 Day6」C

「2017 山东三轮集训 Day6」C

题目描述

JOHNKRAM 对于可持久化数据结构比较感兴趣,某天他突然想到:能否将可持久化线段树和可持久化字典树合二为一呢?于是他出了这样一道题:

给一个长度为 n n 的序列 ai a_i ,每次对序列中的所有数与另外某个数进行一次某种位运算或者询问区间 [l,r] [l, r] 内第 k k 大的数是多少。JOHNKRAM 发现他自己不会做,于是他来向你求助。

输入格式

第一行包含两个整数 n n m m ,表示序列长度和操作个数。
第二行包含 n n 个整数,表示序列 ai a_i
接下来 m m 行,每行是以下四种之一:

  • Xor x \texttt{Xor x}
  • And x \texttt{And x}
  • Or x \texttt{Or x}
  • Ask l r k \texttt{Ask l r k}

前三种表示对整个序列与 x x 进行一次给定位运算,最后一种表示一次询问。

输出格式

对于每一次询问,输出一个整数,表示区间 [l,r] [l, r] 内第 k k 大的数。

样例

10 10
1 2 3 4 5 6 7 8 9 0
Xor 1
And 254
Ask 1 2 2
Ask 1 8 3
Ask 1 7 4
Or 513
Xor 2
Ask 5 10 3
Ask 1 9 6
Ask 3 10 3
2
2
4
517
519
517

数据范围与提示

对于 5% 5\% 的数据,1n1000 1 \leq n \leq 1000
对于另外 35% 35\% 的数据,最多存在两种修改操作;
对于 100% 100\% 的数据,1n,m50000,0ai,x<231,1lrn,1krl+1 1 \leq n,m \leq 50000, 0 \leq a_i, x < 2 ^ {31}, 1 \leq l \leq r \leq n, 1 \leq k \leq r - l + 1