#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不超過...