大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。

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

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

posted @ 2019-10-10 20:28  White_star  阅读(111)  评论(0编辑  收藏  举报
}