算法解析
引用几句话总的介绍一下莫队:“莫队算法是由莫涛提出的算法,可以解决一类离线区间询问问题,适用性极为广泛。同时将其加以扩展,便能轻松处理树上路径询问以及支持修改操作。”
具体来说,莫队算法流程如下:
- 把询问、修改之类的东西离线
- 以分块的思想对这些东西进行排序,使得后续暴力移区间时能保证时间复杂度
- 按照顺序暴力移区间,修改答案,回答询问(有时候移动也要加上点奇技淫巧)
是的,莫队就是这么暴力的算法awa,让ta能不被卡掉的,是ta优秀的排序方法
普通莫队
普通莫队的排序方法:以 \(\sqrt n\) 为块长分块,以区间左端点所在块作为第一关键字,区间右端点作为第二关键字,从小到大排序
容易证明,这种排序方法能使暴力移区间的时间复杂度变为 \(O(n\sqrt n)\)
同时,我们可以将普通莫队扩展,演变成以下几种莫队:带修莫队、树上莫队、回滚莫队(当然也是可以综合到一起的)
带修莫队
如字面意思,就是使莫队支持修改,考虑给询问带上时间戳,暴力移区间时边移动时间戳边进行修改即可
为保证时间复杂度,排序方法与普通莫队有所不同(注意块长不能为 \(\sqrt n\)):以 \(n^{\frac{2}{3}}\) 为块长分块,以区间左端点所在块作为第一关键字,区间右端点所在块作为第二关键字,时间戳为第三关键字,从小到大排序
我也不会证明,带修莫队的时间复杂度为 \(O(n^{\frac{5}{3}})\)
树上莫队
跑出树的欧拉序(即dfs访问和返回时都记录一下编号所成的排序),就能华丽地将其转化为一般的莫队
实际上我还没写过这玩意
回滚莫队
蒟蒻博主太菜了,不会QAQ
例题
(打√的是蒟蒻博主做过的QWQ)
P1972 √
P1494 √
P5268 √
P1903 √
CF940F √
标签:复杂度,笔记,关键字,算法,区间,排序,莫队,浅析 来源: https://www.cnblogs.com/Szzkp/p/15203415.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。