一維差分陣列
阿新 • • 發佈:2021-10-04
搭建一維差分陣列可以很方便的進行區間修改和單點查詢
#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); }