其它代码略 本人40分代码
(指pushdown函数) :
void pushdown(int l,int r,int u,int mode){
int mid=(l+r)>>1;
if (mode==1){
maketag(u<<1,mid-l+1,tag[u],1);
maketag((u<<1)+1,r-mid,tag[u],1);
tag[u]=0;
}
else if(mode==2){
maketag(u<<1,mid-l+1,tag2[u],2);
maketag((u<<1)+1,r-mid,tag2[u],2);
tag2[u]=0;
}
}
这里我是分开下传的 然而平方和的更改是依赖于原来的区间和这个数据的,又因为要传就要一起传,所以不能分开并且平方和的要在区间和的之前操作
AC代码:
void pushdown(int l,int r,int u,int mode){
int mid=(l+r)>>1;
maketag(u<<1,mid-l+1,tag2[u],2);
maketag((u<<1)+1,r-mid,tag2[u],2);
tag2[u]=0;
maketag(u<<1,mid-l+1,tag[u],1);
maketag((u<<1)+1,r-mid,tag[u],1);
tag[u]=0;
}