复习了一下树状数组,这几天陆陆续续把板子整理一下放上来
int arr[MaxN];
inline int sum(int x){int res=0;while(x)res+=arr[x],x-=lowbit(x);return res;}
inline void add(int x,int n){while(x<=n)arr[x]+=n;x+=lowbit(x);}
inline int query(int x,int y){return sum(y)-sum(x-1);}
//单点修改,区间求和
int arr[MaxN]
inline int sum(int x){int res=0;while(x)res+=arr[x],x-=lowbit(x);return res;}
inline void add(int x,int d){while(x<=n)arr[x]+=d;x+=lowbit(x);}//arr存储两数差
inline int update(int x,int y,int d){add(x,d);add(y+1,-d);}
//区间增改,单点查询
void add(int x,int y){for (int i=x;i<=n;i+=lowbit(i))ci[i]+=y;c2[i]+=x*y;}
int sum(int x)//查询前x项和
{
int ans=0;
for (int i=x;i;i-=lowbit(i))ans+=(x+1)*c[i]-c2[i];
return ans;
}
//区间修改,区间查询