一维差分树状数组
搭建一维差分数组可以很方便的进行区间修改和单点查询
#include<iostream>
#define N 100
using namespace std;
int c[N], a[N],tree[N];
int n;
int lowbit(int x)
{
return x & (-x);
}
void change(int x,int v)
{
while (x <= n) {
tree[x] += v;
x += lowbit(x);
}
}
void add(int l,int r ,int v)//区间修改
{
change(l, v);
change(r + 1, -v);
}
int ask(int x)//单点查询
{
int res = 0;
while (x > 0) {
res += tree[x];
x -= lowbit(x);
}
return res;
}
void set()//建立一维树状数组
{
for (int i = 1; i <= n; i++)
{
for (int j = i - lowbit(i)+1; j <= i; j++)
{
tree[i] += c[j];
}
cout << tree[i]<<' ';
}
cout << endl;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
c[i] = a[i] - a[i - 1];
}
set();
cout << ask(3);
}

浙公网安备 33010602011771号