题解
首先观察这个 nor 操作的答案是什么?
按位处理,假设 rrr 前的最后一个 111 位置为 xxx 。
-
若 x≥lx\geq lx≥l ,那么当 x,rx,rx,r 的奇偶性相同时答案为 111 ,否则为 0 .
-
若 x<lx<lx<l,那么当 l,rl,rl,r 的奇偶性不同时答案为 1 ,否则为 0 .
考虑 l=r or r−1l=r \text{ or } r-1l=r or r−1 ,一直向前跳相同奇偶性的位置,发现答案只会至多改变一次,也就是对于右端点 rrr 固定来说,不同的区间 nornornor 实际上只有 4k4k4k 种。
将奇偶位置拆分,可以通过对于差分和关键点排序的方法来求出对于右端点 rrr 的每个左端点区间的答案。即维护了很多四元组 (0/1,pr,i,r,v)(0/1,p_{r,i},r,v)(0/1,pr,i,r,v) ,0/10/10/1 代表奇偶性, pr,ip_{r,i}pr,i 表示 rrr 的相同nor值第 iii 个左端点区间的右端点,vvv 表示值。
接着,从小到大枚举 iii 计算答案,对于每个 rrr 维护 奇/偶 两个指针表示当前的 iii 在哪一个左端点区间,再对奇偶位置分别维护线段树,假如进入了新的区间且值增大了,那么就修改对应奇偶线段树的第 rrr 个位置的值,查询相当于后缀 max\maxmax 。
时间复杂度 O(nk(logn+logk))O(nk(\log n+\log k))O(nk(logn+logk)) 。