![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树状数组
_____111
持之以恒
展开
-
HDU-4217 树状数组的应用
思路: 如果用数组暴力的话,每次都要删除操作,复杂度过高。 树状数组比较喜欢和前缀和相联系运用。比如逆序对。先对每一个最深层结点复为1,这样find(x)就可以得到x值。如果某个点已被删除,就标记为0,也就是对其-1。这样查询时,如果在该删除值的前面,无影响。在后面,这样第一个肯定就是。 注意:如果一个数的前一个数和后一个数都已经被删除,这时候第一个和为x的才是,后者也为x因为该点为0,加于不加都一样。这就是需要左侧边界的二分搜索; 具体见:https://www.cnblogs.com/kyo..原创 2020-11-01 00:00:11 · 137 阅读 · 0 评论 -
树状数组(HDU1754 、洛谷)
图片来源:bestsort.cn 树状数组与线段树: 树状数组和线段树复杂度一样,查询更新为O(logn),树状数组比线段树的代码简洁,巧妙利用二进制lowbit(x)(表示x的二进制最右边的1)。但是线段树能解决的树状数组未必可以解决,树状数组可以解决的线段树一定可以解决。 lowbit(x) 如何取出二进制的1,对于一个二进制…..1….00..0(1前面是0或1,1后面全部是0),得到这个1,可以想到移位,但是又要循环到1。寻找更优化的复杂度,对每一位取反再相与全部为0,怎么样让那个1取反仍然原创 2020-10-21 20:53:54 · 402 阅读 · 0 评论