题目链接: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)的贡献为2i×(r−l+1).
认真写一下lazy标记的处理就好,蛮好写。注意线段树sum[rt][i]的顺序,惨遭卡常。。
1 |
|
v1.5.2