不会猫树qwq

提供一个分块思路吧。设块大小为BB,记m=1024m = 1024

观察到复杂度要偏向预处理,考虑维护区间FWTFWT点积,询问时再IFWTIFWT

块内直接每个区间求出来,O(nBB2)=O(nBm)O(\dfrac nB B^2) = O(nBm)

并求出所有S(L,R)S(L,R)表示第LL个块到第RR个块的FWTFWT点积,O((nB)2m)O((\dfrac nB)^2m)

查询就直接问出两端散块中间整块拿来乘,或者有可能直接在一块内询问,都是O(m)O(m)

最后利用FWT(FWT(a))i=maiFWT(FWT(a))_i = m \cdot a_i单点求值,O(m)O(m)

B=n3B = \sqrt[3]{n}时平衡,时间复杂度为O(nmlogm+nn3m+qm)O(nm \log m + n\sqrt[3]{n}m + qm)

赛时代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=54551060