范围更新 - 使用Fenwick树

时间:2015-06-21 10:38:15

标签: fenwick-tree

http://ayazdzulfikar.blogspot.in/2014/12/penggunaan-fenwick-tree-bit.html?showComment=1434865697025#c5391178275473818224

例如,被告知索引-i的函数或f(i)的值是i ^ k,对于k> 1。 = 0并始终坚持这件事。给出如下查询:

  

添加值数组[i],对于所有a< = i< = b as v确定总数   array [i] f(i),对于每个a< = i< = b(记住前一个函数   价值澄清)

To work on this matter, can be formed into Query (x) = m * g (x) - c,
where g (x) is f (1) + f (2) + ... + f (x). 
  

要做到这一点,我们   需要知道m和c的值。为此,我们需要2个单独的   BIT。下面以ab v.To的形式对每次更新进行观察   计算m的值,几乎与范围更新相同 -   点查询。我们可以得到以下每个值的观察结果   我,可能是:

i <a, m = 0
a <= i <= b, m = v
b <i, m = 0

通过使用以下观察,很明显可以在任何BIT上使用范围更新 - 点查询。要计算c的值,我们需要观察i的每个值的可能性,可能是:

i <a, then c = 0
a <= i <= b, then c = v * g (a - 1)
b <i, c = v * (g (b) - g (a - 1))

同样,我们需要范围更新 - 点查询,但是在不同的BIT中。 Oiya,为了一点帮助,我写了g(x)的值为k&lt; = 3是的:p:

k = 0 -> x
k = 1 -> x * (x + 1) / 2
k = 2 -> x * (x + 1) * (2x + 1) / 6
k = 3 -> (x * (x + 1) / 2) ^ 2
  

现在,示例问题SPOJ - 可怕的查询。这个问题是   类似的问题已经描述,k = 0.还要注意   有时候这个功能非常极端   不是一种类型的k,但它可能是一些多项式的形状!   例如洛杉矶 - 外星人绑架再次。要解决这个问题,解决方案   是,对于每个等级,我们分别为其BIT计数器m。比特合并   清除柜台c没关系。

     

如果符合以下条件我们如何使用此概念:

     

给定一个整数数组A1,A2,...... AN。

     

给定x,y:向Ax添加1×2,向Ax + 1添加2×3,向Ax + 2添加3×4,添加4×5到   Ax + 3,依此类推,直到Ay。

     

然后返回[Ax,Ay]范围的和。

0 个答案:

没有答案