时间复杂度:n√n
Q:和线段树等较复杂数据结构相比,它有什么优势?
A:首先,看到时间复杂度会让人联想到哪个算法?
Q:莫队。
A:是的,莫队!莫队号称能解决一切区间问题,然而它是离线的;但是我们的分块却是在线处理!!!
1)数据结构能接受的数据范围分块基本上能搞
2)分块代码短,容易调试
这两个优点不是秒掉主席树,树套树,splay……
一、基础分块
hzwer入门8题:传送门
分块的大体模板没什么好讲的,但是注意的是可以学习另一种写法,因为黄学长的写法有时会不好处理:
inline void prep(){
……
siz=sqrt(n);
FOR(i,1,n)bl[i]=(i-1)/siz+1;
……
}
inline void Add_Query(int L,int r,int c){
if(bl[r]-bl[L]<=1){//两块相邻或在一个块中 √n
FOR(i,L,r)……; ……
}else {
FOR(i,L,bl[L]*siz)……; //散块√n
……FOR(i,bl[L]+1,bl[r]-1)……;//整体操作√n
FOR(i,(bl[r]-1)*siz+1,r)……;//处理√n
}
}