小Z的袜子

OI-wiki上面关于莫队的介绍都可以看一下(特别是算法模板),这里介绍一下莫队算法时间复杂度的证明,OI-wiki那个有点看不懂

接下来设序列总长度为n,询问为m,块长为L

首先来看左端点移动总次数,设某个块的询问个数为xi,那么这个块内左端点移动的总长度为O(xiL),求一个和可以知道左端点由于在块内移动的次数为O(mL);左端点还可能可以跨块移动,最坏的情况(下面设块的区间为[l,r])是在每一块开始的时候左端点在r,然后块内移动完了左端点在l,接下来又要移动到下一块的r并重复,这样的时间复杂度为O(LnL)=O(n)

然后来看右端点的移动总次数,显然对于每一块块内的询问,最多走完整个序列,为O(n),最多有nl个块,所以总时间复杂度为O(nnL)=O(n2L)

综上总时间复杂度为O(mL+n2L),当L=nm时最优

posted @   最爱丁珰  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示