📄 数据结构_树状数组.cpp
字号:
#include<iostream>
using namespace std;
//动态维护区间和,区间[x, y](x>1)上的和为getvalue(y) - getvalue(x - 1).
const int SIZE = 100010;
int n;
int a[SIZE], c[SIZE];//数组下标从1开始
int lowbit(int t)
{
return t & (t ^ (t - 1));
}
void modify(int pos, int value)//在数组a位置pos加上值value时更新数组c
{
while(pos <= n)
{
c[pos] += value;
pos += lowbit(pos);
}
}
int getvalue(int end) //区间1到end的和
{
int sum = 0;
while(end > 0)
{
sum += c[end];
end -= lowbit(end);
}
return sum;
}
int main()
{
int i;
memset(c, 0, sizeof(c));
scanf("%d", &n);
for(i = 1; i <= n; i ++)
{
scanf("%d", &a[i]);
modify(i, a[i]);
}
for(i = 1; i <= n; i ++)
printf("%d\n", getvalue(i));
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -