一、题目描述
样例
样例输入
5 10
2 6 6 1 1
2 1 4
1 2 5 10
2 1 3
2 2 3
1 2 2 8
1 2 3 7
1 4 4 10
2 1 2
1 4 5 6
2 3 4
样例输出
15
34
32
33
50
二、算法分析说明与代码编写指导
如果不了解树状数组,建议先阅读之前的题解:
https://blog.csdn.net/COFACTOR/article/details/104199313
https://blog.csdn.net/COFACTOR/article/details/104206182
b[i] += i * d 一开始我把 += 写成 = 而且没有计算 d = arr[i] - arr[i - 1] 而是直接把右边写成 i * a[i] 害得我卡在样例很久,靠。
三、AC 代码
#include<cstdio>
#pragma warning(disable:4996)
template<class _Ty> class Binary_Index_Tree_D {
private:
_Ty* a, * b; size_t n;
size_t lowbit(const size_t& x) const {
return x & (~x + 1); }
_Ty at_b(size_t N) const {
_Ty sum = 0;
while (N) {
sum += b[N], N -