例如,被告知索引-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]范围的和。