分块需要个什么学习笔记!?
这只是一个非常牛叉的思想,支持数据的修改、查询,把数据分成个n^1/2个长度为n!1/2的块,可以很方便的查找、修改,查找就是一块接一块地跳,修改就是把整块重新弄,时间复杂度都是O(n^1/2)。
来一段初始化代码,当然也可以不要这个,可以通过代数运算算出来。
还有就是要注意调试的时候小数据有可能块都不会垮,所以可以尝试把块改小一点,当然也可以大数据对拍。
还有就是块的内部是可以打乱的。
代码
struct BLOCK
{
static const int TIM=600;
int num,n,L[maxn/TIM+5],R[maxn/TIM+5],belong[maxn],A[maxn];
void build()
{
L[0]=R[0]=0;
for(num=1;num*TIM<n;num++)
{
L[num]=R[num-1]+1,R[num]=L[num]+TIM-1;
for(int i=L[num];i<=R[num];i++)belong[i]=num;
}
L[num]=R[num-1]+1,R[num]=n;
for(int i=L[num];i<=R[num];i++)belong[i]=num;
}
}blo;