树状数组小结"/>
树状数组小结
树状数组就两种情况,每次更新一个点,最后的时候统计一个区间,或者每次更新一个区间,最后统计某个点
然后有个图可以帮助我们理解:
就是这个
每个节点的管辖范围是他的左子树 然后和 树状数组是对应的
这张图是百度上的
然后模板:
一维模板:
inline int lowbit( int x ){return x & ( -x );
}void updata( int x, int val ){while( x <= N ){sum[x] += val;x += lowbit( x );}
}int getsum( int x ){int ans = 0;while( x > 0 ){ans += sum[x];x -= lowbit( x );}return ans;
}
二维模板:
inline int lowbit( int x ){return x & ( -x );
}void updata( int x, int y, int val ){for( int i = x; i <= N; i += lowbit( i ) ){for( int j = y; j <= N; j += lowbit( j ) ){sum[i][j] = ( sum[i][j] + val ) % 2;}}
}int getsum( int x, int y ){int ans = 0;for( int i = x; i > 0; i -= lowbit( i ) ){for( int j = y; j > 0; j -= lowbit( j ) ){ans = ( sum[i][j] + ans ) % 2;}}return ans;
}
刷的题目就是夏天的风的树状数组总结上的题目 点击打开链接
更多推荐
树状数组小结
发布评论