分块模板

来源:互联网 发布:js utf 8 编辑:程序博客网 时间:2024/06/03 04:03

看了 B站上qsc的视频 学习了分块

也用了qsc分块的做法

其中delong[i]数组用来存放i属于第几块 block代表每块有多少个数,num代表块的数量,l[i]代表i的左边界是多少   r[i]代表i的右边界是多少;

int delong[MAXN],block,num,l[MAXN],r[MAXN];void build(){    block = sqrt(n);    num=n/block;    if(n%block)num++;//如果最后又剩余那么快数+1    for(i = 1;i<=num;i++)        l[i] = (i-1)*block+1,r[i] = i*block;    r[num] = n;    for(i = 1;i<=n;i++)        belong[i] = (i-1)/block+1;}

经过这个build后将1-n分为num块可以用其余函数对每块进行整体操作 询问等这里和线段树很相似但是分块可以做很多基础线段树做不了的整体操作



0 0
原创粉丝点击