@codesonic 正确的方法不应该是令块大小为SS,然后来分析复杂度吗,大概是O(MS+N2/S)O(MS+N^2/S),因为每个询问最多移动O(S)O(S),每个块最多移动O(N)O(N),所以S=N/MS=N/\sqrt{M}最优,此时复杂度为O(NM)O(N\sqrt{M}); 更精确的算,复杂度应为O(MS+NS+N2S+....+N(N/S)S)O(MS+N-S+N-2S+....+N-(N/S)*S) =O(MS+N2/S(N+S)N/S/2)=O(MS+N^2/S-(N+S)N/S/2) =O(1/2N2/S+MS)=O(1/2*N^2/S+MS)

所以当MS=1/2N2/SMS=1/2*N^2/S的时候,即S=N/M2S=N/ \sqrt{M*2}时候有最小复杂度(我也不知道算对没)当然块大小是要看情况调整的;带修莫队同理吧

2018/8/16 11:16
11751