题目链接:https://ac.nowcoder.com/acm/contest/283/J
小姐姐想要一种数据结构,支持如下操作:
对于一个整数数组:
\1. 给定L和R,输出[L,R]中元素的和
\2. 给定L,R和X,将[L,R]中每个元素与X进行按位或运算
\3. 数组索引从1开始
按位或在C\C++、Java、Python中为’|’运算符
难点在于如何处理或操作。
做过异或线段树的题,这个或自然会想到拆位处理,针对每一位建一棵线段树,如果或的数字的某一位为1时,则这一位(假设是第$i$位)在区间$[l,r]$对于答案(sum)的贡献为$2^i\times(r-l+1)$.
认真写一下lazy标记的处理就好,蛮好写。注意线段树$sum[rt][i]$的顺序,惨遭卡常。。
1 |
|