找规律+STL乱搞?
分析:
首先分析题目,要求给定一些区间,求区间中有多少对(x,y)满足x^y的1的个数为奇数
我们知道x^y的1的个数=x中1的个数+y中1的个数-2*共同出现的1的个数
因为只需知道奇偶性,所以2*共同出现的1的个数不用管
问题转化为实时维护当前区间并中,1的个数为奇数、偶数的数字个数。
对于一个区间,若左端点为偶数,右端点为奇数,则1的个数为奇数、偶数的数字个数各占一半。
简单证明一下,若x为偶数,则x+1的1的奇偶性一定不同,若x为奇数,则x+1的1的奇偶性可能不同
分情况讨论
A
B
B
A
A
B
A
B
可以发现无论哪种情况,1的个数为奇数、偶数的数字个数都各占一半。
证毕
我们们可以离线下来所有(左闭右开)区间的端点a1, a2,···, ak,然后将整个数轴拆为k−1段:[a1, a2),[a2, a3),···,[ak−1, ak),并使用set维护剩余的没有进入段,然后每次直接遍历新增区间中剩余的段即可。
注意删除迭代器指向的元素时可能会出现指针失效的情况,这篇博客给出了解决方法