解题思路与算法
前缀和+奇偶性计数
令序列为 b[1…n]。对于每个位置 i,定义 xi=bimod2(xi=1 表示该位置是活跃点,xi=0 表示平静点)。定义前缀和数组
S[0]=0,S[i]=∑k=1ixk(1≤i≤n),
即 S[i] 表示前 i 个位置中活跃点的总个数。子段 b[i…j] 中包含的活跃点个数为 S[j]−S[i−1],当且仅当 S[j] 与 S[i−1] 奇偶性不同时,该子段活跃点个数为奇数,即该子段是一个脉冲子段。
对于一次查询区间 [l,r],我们要统计所有满足条件的子段 (i,j),满足