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