19十一高端峰会——金华站 T1 异或

找规律+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维护剩余的没有进入段,然后每次直接遍历新增区间中剩余的段即可。

注意删除迭代器指向的元素时可能会出现指针失效的情况,这篇博客给出了解决方法

猜你喜欢

转载自www.cnblogs.com/White-star/p/11650409.html
t1