[除錯筆記] 10.8模擬賽11 T4 甜圈
阿新 • • 發佈:2020-10-09
這題正解線段樹維護雜湊,同機房神犇已經講的很明白了。這裡只說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;
}