树状数组总结

树状数组告一段落了,我做了不少相关的练习题,这篇博客主要来讲一下这段时间做题时的一些感想。

  1. 首先我认为树状数组也可以说是一个工具,因为它的写法是唯一的,应用场景也是固定的。它不像线段树这样的数据结构,对于不同的题目/不同的要求,线段树中维护的辅助信息也是不同的。我做了不少树状数组的题目,树状数组的写法是都是一样的(我只见过一种扩展用法),用法也是固定的,都是单点修改和区间和查询这两个操作。因此我认为:树状数组和前缀和、离散化、排序这样的知识点都是用法固定的工具,当有特定的需要时就直接拿来用即可。例如:当需要将给定序列进行排序时就要用排序操作,当需要进行快速的单点修改+区间和查询时就需要用到树状数组……
  2. 因为树状数组的应用十分的固定,因此关于树状数组题目的难点一般也不是树状数组这个数据结构本身。树状数组题目的难点在于:如何把一个题目变成一个只需要单点修改和区间和查询这两个操作就可以得到最后要求的信息的这个过程,即我们如何才能在这个题上用上树状数组求解答案。我在做树状数组相关练习时经常有不会做的题目,而不会做的原因大多数是因为我不知道这个题怎么才能用树状数组进行求解,一旦知道了这道题怎么才能用上树状数组来求解答案,那这道题基本上就算是做出来了。而线段树的题目很多时候的难点在于如何把辅助信息求出来,有时候即使知道了如何用线段树求解这道题,求出线段树维护的辅助信息也是一个大的难题。
  3. 我发现大多数用树状数组能求解的题目,用线段树也都能求解,刚开始我还觉得这件事挺神奇的,但后来仔细想了想,确实也没有什么问题,因为用线段树可以单点修改和区间和查询这两个树状数组的主要操作。线段树的应用范围要比树状数组大的多。
  4. 树状数组的应用场景相比于其他数据结构或算法来说其实并不多,比较典型的用法也不是很多,我在做题的时候遇见了很多用法上重复的题目。在这我总结一下:
    区间修改+单点查询(树状数组维护一个差分数组):一个简单的整数问题
    区间修改+区间和查询(多个树状数组共同维护信息):一个简单的整数问题2
    查找一段序列中的某一个数的左边/右边有多少大于/小于它的数(树状数组维护一个桶):楼兰图腾
    扩展用法:树状数组维护区间最值:Balanced Lineup G
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lwz_159

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值