说树状数组其实是一个索引表,但是是一个特殊的,树状的索引表,它利用了二进制的一些特性。 就区间求和的要求来说: 首先我们用a[]数组来存储原始数据。然后在a[]之上构造c[]数组来作为树状数组。 如图 这个图表示,当i为奇数时,c[i]中保存的都是a[i]本身。然后,c ...
FBI WARNING 在阅读前,请先弄懂单点修改 区间查询和区间修改 单点查询。 近日,本萌新在学习了树状数组后,在某度上寻找了各大大佬的区间修改 区间查询的博客。 发现了高一年级无法理解的奇怪的操作... 于是乎,在我的不懈努力 手动模拟 之下,终于弄懂了这个树状数组区间求和修改的奥 义。 那么首先我们假设一个数组a,里面是我们的所有数。 让我们回忆一下区间修改需要干什么,对了 维护差分数组 ...
2018-08-03 15:09 1 720 推荐指数:
说树状数组其实是一个索引表,但是是一个特殊的,树状的索引表,它利用了二进制的一些特性。 就区间求和的要求来说: 首先我们用a[]数组来存储原始数据。然后在a[]之上构造c[]数组来作为树状数组。 如图 这个图表示,当i为奇数时,c[i]中保存的都是a[i]本身。然后,c ...
树状数组区间加法&区间求和操作 一般的树状数组解决区间加&单点询问并不复杂 但是要解决区间求和。。。 我们假设原数组是\(\{a_i\}\),差分数组\(\{d_i=a_i-a_{i-1}\}\) 所以,我们有式子 \[a_x=\sum_{i=1}^xd_i ...
目录: ① 单点修改、区间查询 树状数组 原理 ② 区间查询、单点修改 树状数组 ③ 区间查询、区间修改 树状数组 ④ 二维树状数组 单点修改、区间查询 二维树状数组 区间修改、单点查询 二维树状数组 区间修改、区间查询 二维树状数组 ①单点修改 ...
“高级”数据结构——树状数组! ※本文一切代码未经编译,不保证正确性,如发现问题,欢迎指正! 1. 单点修改 + 区间查询 最简单的树状数组就是这样的: 2. 区间修改 + 单点查询 通过“差分”(就是记录数组中每个元素与前一个元素的差),可以把这个问题转化为问题1。 查询 设原 ...
也许更好的阅读体验 好东西,以后可以不打线段树了 本篇假定读者都会最基础的两种树状数组,即区改单查和单改区查 思考如何维护一个区间的值,想到了差分 对一个差分数组做一次前缀和可以得到每个位置的值 再对每个位置累加一下就是一个区间的值 公式化的讲,就是 设差分数组为\(c\) 则每个位置的值 ...
看了很长时间大佬的博客,终于明白了区间修改和单点查询的原理,因为大佬们的思维比较强大,所以菜鸡决定写一篇较为详细的解释。 首先引入差分数组d,设原数组为a,令d[i]=a[i]-a[i-1].由此关系式得,也就是a[j]等于d[j]的前 j 项和,即前缀和。 于此,我们的树状数组维护 ...
树状数组最原始的作用就是求前缀和,可以实现单点修改和区间查询。 但是假设现在有: 1.区间修改,单点查询 2.区间修改,区间查询 但是又不想敲线段树怎么办? 就用树状数组喽。 假设现在有一个原数组a(假设a[0] = 0),有一个数组d,d[i] = a[i] - a[i-1 ...
其实之前在K大数查询中就已经用到了,只是一直没有说明 所以今天就来补个欠账。 感觉单点修改、区间查询和区间修改、单点查询没什么必要讲,这里就只讲区间修改、区间查询(其实也不难)。 设原数组第\(i\)位的值为\(a_i\),\(d_i=a_i-a_{i-1}\),则有(这里认为\(a_0 ...