专栏文章

题解:XOR and OR

P12500题解参与者 3已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@mipejola
此快照首次捕获于
2025/12/03 10:42
3 个月前
此快照最后确认于
2025/12/03 10:42
3 个月前
查看原文

Solution

考虑拆位。考虑求出按位或和为 00 的区间数,用总区间减去这些就是按位或和为 11 的区间数。
显然,按位或和为 00 等价于区间内全部为 00。线段树维护左边和右边最长的 00 连续段长度 L,RL,R、区间内按位或和为 00 的区间数 ss、区间数反转后(0101 互换)的积 ww
线段树合并信息 (L,R,s,w)(L,R,s,w)(L,R,s,w)(L',R',s',w') 时:
{s=s+s+R×LL=w×L+LR=w×R+Rw=w×w\begin{cases} s''=s+s'+R'\times L\\ L''=w\times L'+L\\ R''=w'\times R+R'\\ w''=w\times w' \end{cases}
由于有区间 0101 反转,还要维护区间 0101 反转后的答案。
这样直接做是 O(nlognlogV)\mathcal O(n\log n\log V) 的,无法通过。
考虑求的是异或和,即模 22 的结果。加法和乘法在模 22 意义下等价于按位异或、按位与。因此,将每位的线段树的信息压到一个数里面,合并时将加法改为异或、乘法改完按位与即可。
复杂度 O(nlogn)\mathcal O(n\log n)。代码很好写,就不放了。

评论

3 条评论,欢迎与作者交流。

正在加载评论...