分块--莫队算法(一)

很久很久没空写博客了…这两天学了点分块和莫队,瞎jb写点..

分块

一个对于一些线段树之类无法解决的区间问题十分6的暴力算法.它的思想简单来说就是把一整个序列分成几块(一般为根号数列长度,不过也要视情况),然后维护每个块里的答案,当查询[l,r]时对于l和r所在区间暴力求解,再扫一遍l所在加一块到r所在减一块这些分出的块里的答案.这个操作显然可以看到是max(块大小,块数量)这个级别,因此取根号时就是根号的复杂度.再讲下修改,基本也是类似,暴力搞就行(也要视题目而定,有可能要O(n)来更新).
模板和模板题贴下一个帖子里了.

莫队

一个基于分块思想的算法,也十分暴力,不过被称为”优雅的暴力”…简单说就是一坨对区间的查询(无法用线段树维护之类的),用个对于每个查询精妙的排序方法来将复杂度降下来(因此是个离线算法).而莫队一般排序是查询左节点所在块(分块的块)不同时按这玩意从小到大排,不然按右节点大小排.可以证明复杂度是m*根号(m)左右的(左右指针显然每次平均最多跳个根号级左右,与分块类似).

这两个算法大致就这样,模板和题我就再水几篇博客了,毕竟好久没发了..

猜你喜欢

转载自blog.csdn.net/caoyang1123/article/details/79292479