为什么你们线段树更新和查询的时候喜欢这样:
int query(int rt,int l,int r,int L,int R){
if(L<=l&&r<=R) return tree[rt].sum;
int mid=(l+r)>>1,res=0;
pushdown(rt);
if(L>=mid) res+=query(lcs,l,mid,L,R);
if(R<mid) res+=query(rcs,mid+1,r,L,R);
pushup(rt);
return res;
}
而不是这样:
int query(int rt,int l,int r){
if(l>tree[rt].r||r<tree[rt].l) return 0;
if(l<=tree[rt].l&&tree[rt].r<=r) return tree[rt].sum;
return pushdown(rt),query(lcs,l,r)+query(rcs,l,r),pushup(rt);
}
很明显下面更简洁明了,十分适合我们压行选手
浙公网安备 33010602011771号