解法
のときの答えを求めてみます。
については、
の累積xorをとっておくことで
で求めることができるので割愛します。
と
のxorを取った値を
とすると、xorの定義から、それぞれの桁について、
の立ってるビットの個数が1ならば
のその桁は1、そうでなければ0となります。
について立っているビットは最初から決まっているので、
について、それぞれの桁で立っているビット、立っていないビットの個数が全部で何個あればいいか、というのがわかればよいことになります。
ということは、から
までのそれぞれのビットについて、立っている個数と立っていない個数を調べれば、
のビットによって場合分けをして、
を表すビットの部分は
全体で何回足されるか、というのが計算できるようになります。
感想
桁でわける、という典型を思い出したらすんなり解けたのでよかったです。 実装もバグらせなかった(記憶)ので満足かなと思います