Gravatar
终焉折枝
积分:1433
提交:193 / 351

Pro4291  [CQOI2018] 异或序列


更好的阅读体验:https://www.cnblogs.com/To-Carpe-Diem/p/19555727


大意


求一段区间 $[l, r]$ 里面的 $(i, j)$ 二元组,满足 $s[i] \oplus s[i + 1] \cdots \oplus s[j] = k$。


思路


首先,我们不难想到这个异或的性质可以扩展,然后,我们可以考虑用莫队求解此题。


对于询问分块,那我们只需要考虑加入一个点与删除一个点对 $ans$ 的贡献。


由于异或具有前缀和的性质,即为异或和,那么我们的 $s[i] \oplus s[i + 1] \cdots \oplus s[j] = s[j] \oplus s[i - 1] = k$,也就是说,我们的点 $s[j] = s[i - 1] \oplus k$,于是我们对于点 $i$ 来说,加入这个点就会对 $s[i - 1] \oplus k$ 的位置的值产生贡献,使得 $s[i - 1] \oplus s[j] = k$,那么这个题就和 [P1494 [国家集训队] 小 Z 的袜子](https://www.cnblogs.com/To-Carpe-Diem/p/19434503) 一样了。





2026-01-30 20:47:36    
我有话要说
暂无人分享评论!