莫队算法 总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Larry1118/article/details/87360515

普通莫队

首先,莫队一定是离线的!!!
然后,就是对于每个l,r都在那儿不断地移动并更新Ans。
但这样的话非随机数据就会被卡掉了。
怎么办呢?
我们的可以用分块+排序来搞搞。
我们将它n个点分成根号n块。
然后我们以l所在的块为第一关键字,r为第二关键字,来从小到大排序。
这样子我们就可以保证l每次移动最多为根号n,r每次移动最多为n。
而且,我们还可以按照奇偶排序(l位于奇数块的r从小到大,位于偶数块的r从大到小)
这样子就又能快很多了!!!

但O(n * m)是不可能达到的!!!

所以,时间可以过了。。。
这就是莫队的基本模板了。

带修莫队

带修莫队就是增加了一个修改操作,所以我们必须要存一下它的时间。
我们将修改操作和询问操作分开来排序。(询问其实不用排的
修改操作便是以左端点所在的块为第一关键字,右端点所在的快为第二关键字,时间为第三关键字从小到大排序。
然后就是用三个指针来维护一下左端点,右端点和时间即可。

树上莫队

树上莫队的话,%d%a%l%a%o这位大佬讲的非常完美!!!
我们就是要做一个欧拉序,然后对于每个询问就转换成普通莫队的区间询问即可。
具体就不展开讲了。。。
至于例题嘛,那都在下面呢:







我的莫队例题都是从这儿的例题刷来的↙

dalao

以及

大佬%d%a%l%a%o!!!

但我觉得莫队讲得好的还是hzwer大佬(不只是总结,还有每道题)

下面是例题及来源:
bzoj 2038 [2009国家集训队]小Z的袜子(hose)
luogu SP3267 DQUERY - D-query
↑就是↓的弱化版,用莫队就能卡过
luogu P1972 [SDOI2009]HH的项链(bzoj也有)
bzoj 2120 数颜色(luogu也有)
NPY and girls
Lucky
Graph
项目管理
下面是题解:
bzoj 2038 [2009国家集训队]小Z的袜子(hose)
luogu P1972 [SDOI2009]HH的项链
bzoj 2120 数颜色
NPY and girls
Lucky
Graph
项目管理
(待更)

猜你喜欢

转载自blog.csdn.net/Larry1118/article/details/87360515