莫队算法的耗时 发表于 2016-10-01 | 更新于 2018-06-18 序列莫队的复杂度证明讨论 对于同一块内的所有询问,右端点的移动是O(n)O(n)O(n)的,左端点的移动是O(n)×O(n)=O(n)O(\sqrt n) \times O(\sqrt n)=O(n)O(√n)×O(√n)=O(n) 对于qiq_iqi和qi+1q_{i+1}qi+1再不在同一块中的询问,左端点移动O(n)O(\sqrt n)O(√n),右端点移动O(n)O(n)O(n)。这样的询问一共有n\sqrt n√n个。总复杂度为n×(O(n)+O(n))=O(nn)\sqrt n \times (O(\sqrt n)+O(n))=O(n\sqrt n)√n×(O(√n)+O(n))=O(n√n) 总复杂度为O(nn)O(n\sqrt n)O(n√n) 思考再确定莫队以后,要想怎样才能减小转移的时间消耗。比如,在我看来,树上莫队要用DFSDFSDFS序的话就会很慢,因为块内的节点可能隔的很远,而且可能排成很长的一条链。