题意
对于一个集合 (S),定义 (F(S,x)=sum_{Tsubset S}G(T) imes x^{|T|}),其中 (G(T)=igoplus_{xin T}x),空集的异或和为 (0)。
有 (Q) 个询问,每次给出区间 ([l,r]) 和 (x),令 (S) 是序列的第 (lsim r) 个元素构成的集合,求 (F(S,x))。
答案对 (998244353) 取模。
( exttt{Data Range:}nleq 10^5,Qleq 10^5)。
分析
可以想到拆位。考虑区间 ([l,r]) 内,第 (k) 位上为 (1) 的数有 (m) 个。则对于第 (k) 位,显然有贡献式:
[left(sum_{jmod2=1}sum_{i=0}^{n-m}inom{m}{j}inom{n-m}{i}x^{i+j}
ight) imes2^k
]
提取无关项,可以将柿子化为两个无关的部分从而分别计算。
[left(left(sum_{jmod 2=1}inom{m}{j}x^j
ight) imesleft(sum_{i=0}^{n-m}inom{n-m}{i} imes x^i
ight)
ight) imes2^k
]
右半部分的和式是非常好处理的,难以处理的是左半部分。
这个时候我们想到一个经典恒等式:
[sum_{imod 2=0}inom{n}{i}=sum_{imod 2=1}inom{n}{i}
]
这个恒等式是通过构造 ((1-1)^n) 从而用二项式定理求解得到的。我们也可以用类似的方式构造 ((x-1)^n) ,并且与 ((x+1)^n) 作和或作差得到左半部分的和式。值得注意的是,(n) 的奇偶性会对值造成影响,需要分类讨论。
这里放上结论:
[egin{cases}
sumlimits_{imod 2=1}inom{n}{i} imes x^i=frac{(x+1)^n-(x-1)^n}{2}, ext{if } nmod 2=0
\
sumlimits_{imod 2=1}inom{n}{i} imes x^i=frac{(x+1)^n+(x-1)^n}{2}, ext{if }nmod 2=1
end{cases}
]
很轻松的就可以算出最终的答案,时间复杂度为 (O(n log^2 P)),其中 (P) 是模数。