建议把异或和改成难以快速减去贡献的函数
查看原帖
建议把异或和改成难以快速减去贡献的函数
30093
cosmicAC楼主2020/5/5 20:01

Rt,否则此题存在严格快于(我完全不会的)"分散层叠算法"的时间复杂度O(nk+Q)O(nk+Q)、空间O(nk)O(nk)的做法。可以参见这个提交

我想了很多点子,最后觉得应该使用Hash搞。就是最最常见的Hash:

H(a)=(i=1kansiBi1)modMH(a)=\left(\sum_{i=1}^{k}ans_iB^{i-1}\right)\bmod M

每次强制在线的询问里同时给出Hash函数的进制BB和模数MM即可。可以防止预处理。

另:就算直接把QkQk个答案全部输出,也存在显然的时间复杂度O(knQ+(nk+Q)lognk+Qk)O(k\sqrt{nQ}+(nk+Q)\log{nk}+Qk)、空间复杂度O(knQ+nk)O(k\sqrt{nQ}+nk)的做法,即分大小为knQk\sqrt{\dfrac{n}{Q}}的块。实际上还能更快,因为memcpy的常数远小于11,假设其常数为1w\dfrac{1}{w},就可以把分块大小改成knQwk\sqrt{\dfrac{n}{Qw}}。参见我自己的提交。征求能够把这种做法卡掉的n,Q,kn,Q,k

2020/5/5 20:01
加载中...