Rt,否则此题存在严格快于(我完全不会的)"分散层叠算法"的时间复杂度O(nk+Q)、空间O(nk)的做法。可以参见这个提交。
我想了很多点子,最后觉得应该使用Hash搞。就是最最常见的Hash:
H(a)=(∑i=1kansiBi−1)modM
每次强制在线的询问里同时给出Hash函数的进制B和模数M即可。可以防止预处理。
另:就算直接把Qk个答案全部输出,也存在显然的时间复杂度O(knQ+(nk+Q)lognk+Qk)、空间复杂度O(knQ+nk)的做法,即分大小为kQn的块。实际上还能更快,因为memcpy
的常数远小于1,假设其常数为w1,就可以把分块大小改成kQwn。参见我自己的提交。征求能够把这种做法卡掉的n,Q,k。