树状数组总结

经过了5天的练习,再看了一遍树状数组,虽然第一遍基本没有怎么看,再看的时候可能是因为年龄和思维比大一更强了一点,所以再看的时候比第一次的一头雾水好了很多很多。接下来进行总结。

树状数组或者二叉索引树也称作Binary Indexed Tree,又叫做Fenwick树;它的查询和修改的时间复杂度都是log(n),空间复杂度则为O(n),这是因为树状数组通过将线性结构转化成树状结构,从而进行跳跃式扫描。通常使用在高效的计算数列的前缀和,区间和。

树状数组的优点:

  1. 代码短小,实现简单;
  2. 容易扩展到高纬度的数据;

缺点:

  1. 只能用于求和,不能求最大/小值;
  2. 不能动态插入;
  3. 数据多时,空间压力大;

可以看3篇个人认为较好的博客。

https://www.cnblogs.com/George1994/p/7710886.html

https://blog.csdn.net/rentenglong2012/article/details/69230308

https://blog.csdn.net/Proer_floweer/article/details/78845175

因为树状数组的特点,所以一般应用于只有更新和查询的题目(更新分为单点更新和区间更新),最经典的是逆序数(单点更新),

这几个题是基础的一维树状数组帮助理解

单点更新

HDU 1394  POJ 2352   POJ 2481

有时候数字规模太大,需要用到离散化的思想

POJ 2299  

多维树状数组

多维树状数组一维的更新 HDU 4267

多维树状数组多维的更新 POJ 1195

区间更新:

HDU 1556

猜你喜欢

转载自blog.csdn.net/deepseazbw/article/details/81116116