这几天主要看了一下课件里的例题并刷了几道线段树练习题,上次主要看的是单点更新的,这次主要看了一下区间更新的,区间更新跟单点更新的不同之处在于另定义一个数组用于储存修改操作,其分区间也应被修改,但是修改储存在了数组中,可以暂时不用修改;而对于当前区间比需要的目标区间大的时候,则需要往下进行修改了。
其基本模版如下:
void update(int num,int le,int ri,int x,int y)
{
if(x<=le&&y>=ri)
{
tre[num]++;
laz[num]++;
return ;
}
pushdown(num);
int mid=(le+ri)/2;
if(x<=mid)
update(num*2,le,mid,x,y);
if(y>mid)
update(num*2+1,mid+1,ri,x,y);
}
void pushdown(int num)
{
if(laz[num]!=0)
{
tre[num*2]+=laz[num];