[调试笔记] 10.8模拟赛11 T4 甜圈
这题正解线段树维护哈希,同机房神犇已经讲的很明白了。这里只说sbwzx在调试的时候犯的sb错误。
1.关于pushdown和update
众所周知,sbwzx一写带lazy的线段树,就必在pushdown和update上花式写挂。那么这次是怎么写挂的呢?快和小编一起来看看吧。
挂掉的码:
ll tree[maxn<<2],lazyp[maxn<<2],lazyadd[maxn<<2];
void updateadd(int rt,int w){
tree[rt]*=w;
lazyadd[rt]*=w;
}
void updatep(int rt,int l,int r,int w){
tree[rt]+=w*(r-l+1);
lazyp[rt]+=w;
}
void pushdown(int rt,int l,int r){
if(lazyadd[rt]!=1){
updateadd(rt<<1,lazyadd[rt]);
updateadd(rt<<1|1,lazyadd[rt]);
lazyadd[rt]=1;
}
if(lazyp[rt]){
int mid=(l+r)>>1;
updatep(rt<<1,l,mid,lazyp[rt]);
updatep(rt<<1|1,mid+1,r,lazyp[rt]);
lazyp[rt]=0;
}
}
神犇yxy一看,直接找出错误:
ll tree[maxn<<2],lazyp[maxn<<2],lazyadd[maxn<<2];
void updateadd(ll rt,ll w){
tree[rt]*=w;
lazyadd[rt]*=w;
lazyp[rt]*=w;
}