题意:
给一个长为 n n n 的只含小写字母的字符串
每次查询一个区间 $[l,r] $内,有多少子区间可以重排为一个回文串。
思路:
首先对于一个可以重排为回文串的区间,一定满足至多一个字母的出现次数为奇数,其余字母的出现次数为偶数。
因为只有26个小写字母其只考虑出现次数的奇偶性,故可以考虑压位 2 26 2^{26} 226 表示每一个字母的出现情况。
对每一位求一个前缀和。
对于一个新加入第 x x x个字母 c h ch ch,如果已知当前区间每一个数的出现情况,则
a d d = c n t [ s u m [ x ] ] + ∑ i = 0 25 c n t [ s u m [ x ] x o r ( 1 < < i ) ] add = cnt[sum[x]] + \sum_{i=0}^{25} cnt[sum[x] \ xor \ (1<<i)] add=cnt[sum[x]]+i=0∑25cnt[sum[x] x