線段樹學習筆記

2021-10-04 11:21:57 字數 1106 閱讀 5366

線段樹的原理

四個基本操作

例題一:

給定 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,右節點編號為...