線段樹的原理
四個基本操作
例題一:
給定 n 個數組成的乙個數列,規定有兩種操作,一是修改某個元素,二是求子數列 [a,b] 的連續和。
輸入格式
第一行包含兩個整數 n 和 m,分別表示數的個數和操作次數。
第二行包含 n 個整數,表示完整數列。
接下來 m 行,每行包含三個整數 k,a,b (k=0,表示求子數列[a,b]的和;k=1,表示第 a 個數加 b)。
數列從 1 開始計數。
輸出格式
輸出若干行數字,表示 k=0 時,對應的子數列 [a,b] 的連續和。
**:
#include
#include
#include
#include
using namespace std;
const
int n=
100010
;struct node
tr[n*4]
;int w[n]
;int n,m;
void
pushup
(int u)
void
build
(int u,
int l,
int r)
;else
;int mid=tr[u]
.l+tr[u]
.r>>1;
build
(u<<
1,l,mid)
,build
(u<<1|
1,mid+
1,r)
;pushup
(u);}}
intquery
(int u,
int l,
int r)
void
modify
(int u,
int a,
int b)
}int
main()
else
}return0;
}
線段樹學習筆記
線段樹是一種 二叉搜尋樹 與區間樹 相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。使用線段樹可以快速的查詢某乙個節點在若干條線段中出現的次數,時間複雜度為o logn 而未優化的 空間複雜度 為2n,因此有時需要離散化讓空間壓縮。以下筆記摘自lcomyn神犇部落格 1....
線段樹學習筆記
本文筆記在參考一步一步理解線段樹 tenos的基礎上形成 線段樹,也是二叉搜尋樹的一種,是基於陣列,但是優於陣列的一種資料結構。同時結合預處理 時間複雜度一般在o n 使得從原來陣列的o n 的查詢和更新複雜度降到了o logn 在處理很大資料量的資料更新和查詢最值方面變得簡單,值得一提的是,它的構...
線段樹學習筆記
線段樹是一種維護區間的資料結構,且滿足二叉樹的全部性質 下圖是一棵維護區間 1 6 1,6 的線段樹 格式 idl ri dl r我們可以發現,對於每個節點 k k 來說,其左節點編號為2k role presentation style position relative 2k2 k,右節點編號為...