eb0ycn @ 2024-04-20 20:44:00
这是单点修改的线段树!修改一定要递归到叶子结点!
if(l==r){t[rt].lm=t[rt].rm=t[rt].s=t[rt].v=b;return;}
不能写成:
if(l==a)//a是修改位置
{t[rt].lm=t[rt].rm=t[rt].s=t[rt].v=b;return;}
还有就是查询时的合并操作,本来应该这样写的:
t[rt].s=t[rt<<1].s+t[rt<<1|1].s;
t[rt].lm=max(t[rt<<1].lm,t[rt<<1].s+t[rt<<1|1].lm);
t[rt].rm=max(t[rt<<1|1].rm,t[rt<<1|1].s+t[rt<<1].rm);
t[rt].v=max(max(t[rt<<1].v,t[rt<<1|1].v),t[rt<<1].rm+t[rt<<1|1].lm);
但我第一行(也就是整个区间和)忘写了居然还能 AC,是为什么呢?