for(inti=1;i<=m;++i){ scanf("%d%d%d",&op,&x,&y); if(op==1){ scanf("%lld",&z); update(x,y,z,root,1,n); } else{ printf("%lld\n",query(x,y,root,1,n)); } } return0; }
}voidupdate(u &rt,constu &l,constu &r,constu &x,constu &y,constu &k){if(!rt) rt=++num;if(l>=x&&r<=y){ a[rt].sum+=k*(r-l+1),a[rt].add+=k;return; } pushdown(rt,l,r); u mid((l+r)>>1);if(x<=mid) update(a[rt].l,l,mid,x,y,k);if(y>=mid+1) update(...
1.建树 网上基本都是静态开点建线段树,需要的空间为4n。这里介绍一种动态开点的方法,只需要2n的空间。 1#defineN 200100//开两倍空间2structnode {3intl, r, lc, rc;//左端点,右端点,左儿子,右儿子4longlongv, tag;//区间和,懒标记5} tr[N];6voidpushup(intlc,intrc,intrt) {//区间和上浮7tr[...