树状数组
//最小2的幂 int lowbit(int n){ return n&(-n); } //A[x]加上y void update(int x,int y){//11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 for(;x<=N;x+=lowbit(x)) c[x]+=y; } //查前缀和 int sum(int x){ int ans=0; for(;x;x-=lowbit(x)) ans+=c[x]; return ans; } //二维插入(x,y)加上z int update(int x,int y,int z){ int i=x; while(i<=n){ int j=y; while(j<=m){ c[i][j]+=z; j+=lowbit(j); } i+=lowbit(i); } } //求小于(x,y)的数目 int sum(int x,int y){ int res=0,i=x; while(i>0){ int j=y; while(j>0){ res+=c[i][j]; j-=lowbit(j); } i-=lowbit(i); } return res; }