不会猫树qwq
提供一个分块思路吧。设块大小为,记
观察到复杂度要偏向预处理,考虑维护区间点积,询问时再。
块内直接每个区间求出来,
并求出所有表示第个块到第个块的点积,
查询就直接问出两端散块中间整块拿来乘,或者有可能直接在一块内询问,都是
最后利用单点求值,
时平衡,时间复杂度为
赛时代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=54551060
不会猫树qwq
提供一个分块思路吧。设块大小为B,记m=1024
观察到复杂度要偏向预处理,考虑维护区间FWT点积,询问时再IFWT。
块内直接每个区间求出来,O(BnB2)=O(nBm)
并求出所有S(L,R)表示第L个块到第R个块的FWT点积,O((Bn)2m)
查询就直接问出两端散块中间整块拿来乘,或者有可能直接在一块内询问,都是O(m)
最后利用FWT(FWT(a))i=m⋅ai单点求值,O(m)
B=3n时平衡,时间复杂度为O(nmlogm+n3nm+qm)
赛时代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=54551060