先考虑最容易的区间加操作。只要 $x\neq 0$ 那么整个区间的数都变化,所以给 B 作一次区间加即可。
对于区间取最值的操作,你发现你打标记与下传标记是与 B 数组一一对应的。本质上你将序列的数分成三类:最大值、最小值、非最值。并分别维护(只不过你没有建出具体的最值集合而已,但这并不妨碍维护的操作)。因此在打标记的时侯顺便给 B 更新信息即可(注意不是给 B 打标记!是更新信息!)。查询的时侯,你在 A 上查询,下传标记的时侯顺便给 B 更新信息。找到需要的结点后,返回 B 的信息即可。这种操作本质上就是把最值的信息拿给 B 去维护了。另外仍要处理数集的重复问题。
### CTSN loves segment tree
CTSN?赤兔少年。吃土少年。
> 两个序列 A,B:
>
> 1. 对 A 做区间取 $\min$
> 2. 对 B 做区间取 $\min$
> 3. 对 A 做区间加
> 4. 对 B 做区间加
> 5. 询问区间的 $A_i+B_i$ 的最大值
>
> $n,m\le 3\times 10^5$。
我们把区间中的**位置**分成四类:在 A,B 中同是区间最大值的位置、在 A 中是区间最大值在 B 中不是的位置、在 B 中是区间最大值在 A 中不是的位置、在 A,B 中都不是区间最大值的位置。对这四类数分别维护**答案**和**标记**即可。举个例子,我们维护 $C_{1\sim 4},M_{1\sim 4},A_{max},B_{max}$ 分别表示当前区间中四类数的个数,四类数的答案的最大值,A 序列的最大值、B 序列的最大值。然后合并信息该怎么合并就怎么合并了。