单点更新+区间求和
不多说,直接上渣code………#include#include #include #include using namespace std;const int N=50007;struct st{ int left,right; int w;};st q[N*4];int n;void build(int num,int L,int R){ q[num].left=L; q[num].right=R; if(L==R) { scanf("%d",&q[num].w); return; } build(2*num,L,(L+R)/2); build(2*num+1,(L+R)/2+1,R); q[num].w=q[2*num].w+q[2*num+1].w;}int Query(int num,int s,int t){ if(q[num].left>=s&&q[num].right<=t) return q[num].w; int mid=(q[num].left+q[num].right)/2; int ans=0; if(mid>=t) ans+=Query(2*num,s,t); else if(mid =i) add(2*num,i,j); else if(mid