ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

P4462 [CQOI2018] 异或序列

P4462 [CQOI2018] 异或序列

P4462 [CQOI2018] 异或序列

大意

求一段区间 \([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 的袜子 一样了。

代码


返回列表