除了查詢要進行輸出,增加不要輸出
#includeusing namespace std; #define LL(x)((x)<<1) #define RR(x)((x)<<1|1) struct_Seg_Tree{ int left,right; long long sum; int add; int calmid(){ return (left+right)/2; } int caldis(){ return right-left+1; } }tt[1000000]; int val[1000002]; long long build(int l,int r,int idx){ tt[idx].left=l; tt[idx].right=r; tt[idx].add=0; if(l==r){ return tt[idx].sum=val[l]; } return tt[idx].sum=build(l,mid,LL(idx)+build(mid+1,r,RR(idx))); } void update(int l,int r,int add,int idx){ if(l<=tt[idx].left&&r>=tt[idx].right){ tt[idx].add+=add; tt[idx].sum+=(long long)tt[idx].caldis()*add;//通過乘以後來添加的數 return ; } if(tt[idx].add){ tt[LL(idx).sum]+=(long long)tt[LL(idx)].caldis()*tt[idx].add; tt[RR(idx).sum]++(long long)tt[RR(idx)].caldis()*tt[idx].add; tt[LL(idx)].add+=tt[idx].add; tt[RR(idx)].add+=tt[idx].add; tt[idx].add=0; } int mid=tt[idx].calmid(); if(l<=mid) update(l,r,add,LL(idx)); if(mid