区間に関するの値は、中のhighest set bitの位置をとして、が立っている数がに何個含まれるかでだいたい決まる:
- が立っている数が1個でそれ以外が0個の場合、その数自身になる
- が立っている数が奇数個の場合、上の場合を除いてになる
- が立っている数が2個でそれ以外が0個の場合、不定
- が立っている数が2個でそれ以外が1個の場合、不定
- が立っている数が2個でそれ以外が2個以上の場合、0にできる
- が立っている数が4個でそれ以外が個の場合、不定
- が立っている数が4個でそれ以外が個以上の場合、0にできる
- が立っている数が6個以上の偶数の場合、それ以外が何個でも0にできる
まずは、が立っている数が偶数個の時に常はの値が0になり、が立っている数が奇数個の時は常にになるとして、偶奇のみに注目して計算する。そして、後から3, 4, 6のパターンを別に数えて補正する。
前半パートは、についてそれぞれ区間に関する結果の和を求めるとよい。この際、
- highest set bitがで、が立っている数を奇数個含むような区間の数
- highest set bitがで、が立っている数を偶数個含むような区間の数
を保持しながら走査するとまとめて計算できる。。