線段樹 的單點更新和區間求和

2021-06-29 10:12:35 字數 911 閱讀 7581

#include

int sum[100];

void build(int lift, int right, int rt);

void updata(int point, int add, int lift, int right, int rt);

int query(int l, int r, int l, int r, int rt);

int main()

// 構建乙個線段樹

void build(int lift, int right, int rt)

int m = (lift + right) / 2;

// 構建左兒子

build(lift, m, rt*2);

// 構建右兒子

build(m+1, right, rt*2+1);

// 構建好左兒子與右兒子之後, 求出雙親

sum[rt] = sum[rt*2] + sum[rt*2+1];

}// 更新單點 去加上乙個數

void updata(int point, int add, int lift, int right, int rt)

int m = (lift + right) / 2;

// 開始尋找是區間 : 在左兒子還是 右兒子

if (point <= m) // 即在左兒子

updata(point, add, lift, m, rt*2);

else

updata(point, add, m+1, right, rt*2+1);

// 還要更新上面的

sum[rt] = sum[rt*2] + sum[rt*2+1];

}// 區間求和

int query(int l, int r, int l, int r, int rt)

線段樹(區間求和,區間加,單點更新等)

線段樹是一種二叉搜尋樹。它將一段區間劃分為若干個單位區間,每乙個節點都儲存著乙個區間。線段樹可做 區間求和,區間最值,區間更新,單點更新等操作 以區間和為例來做介紹 建樹const int maxn 1000000 5 struct treetree maxn 2 把子節點的資訊彙總到了父節點上,根...

線段樹(區間求和,區間加,單點更新等)

線段樹是一種二叉搜尋樹。它將一段區間劃分為若干個單位區間,每乙個節點都儲存著乙個區間。線段樹可做 區間求和,區間最值,區間更新,單點更新等操作 以區間和為例來做介紹 建樹const int maxn 1000000 5 struct treetree maxn 2 把子節點的資訊彙總到了父節點上,根...

線段樹單點更新 求和

第一行乙個整數t,表示有t組資料。每組資料第一行乙個正整數n n 50000 表示敵人有n個工兵營地,接下來有n個正整數,第i個正整數ai代表第i個工兵營地里開始時有ai個人 1 ai 50 接下來每行有一條命令,命令有4種形式 1 add i j,i和j為正整數,表示第i個營地增加j個人 j不超過...