ARC098 D - Xor Sum 2

2019-05-15

なるほど、こういうのを「しゃくとり法」というのか。

最初、「累積和か、しってる!」、「Xor の方も同じように累積(排他的論理)和すればいいのね」とかいって、 いそいそと書いたら TLE。 そりゃそうだ。これでは、\(O(N^2)\) っぽいしなぁ。(正確にはちがうか*1

各二進桁にある 1 の個数が高々 1 個のときにかぎり、Add と Xor の結果が同じになる。 これは、リプルキャリーアダーとかを思い出せばわかる。

で、もうひとつ、(l, r) 区間で条件がなりたつときには、ここに含まれる任意の部分区間でも条件は成立する。 (「高々1」から減る方向なので)

これに気づけば、あとは、「しゃくとり法」で \(O(N)\)

提出: submissions/5408410