樹狀陣列和線段樹

2021-10-02 23:10:25 字數 1055 閱讀 8728

主要解決兩個問題:(其他問題可以轉化)更新某一點的值;求區間值;時間按複雜度(logn)

原陣列a[1] a[2] …a[n];

寫成樹狀陣列c:c[x]=(x-lowbit(x),x] 左開右閉;

筆記

主要**

const int n=?;

int tr[n];

int lowbit(int x)

void add(int x,int v)

int sum(int x)

兩個基本操作:單點修改和區間查詢。

四個核心函式:pushup:用子節點資訊更新當前節點資訊;build:在一段區間上初始化線段樹;modify:單點修改;query:區間查詢;

用陣列儲存線段樹:x的父節點x>>1;x的左兒子:x<<1;x的右兒子x>>1|1.

核心**:

const

int n=

100010

;int n,m;

int w[n]

;struct nodetr[

4*n]

;void

pushup

(int u)

void

build

(int u,

int l,

int r)

;else

;int mid=l+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 x,

int v)

}

線段樹和樹狀陣列

引入1 有n個數 n 50000 個數,m m 50000 次詢問。每次詢問區間l到r的數的和。要求輸出每一次詢問的結果.分析 1.用字首和問題進行求解 再開乙個陣列 暫且記為b n 設n個數所組成的陣列為a n b i 用來記錄從a 1 到a i 的所有數字的和 即 b 1 a 1 b 2 b 1...

線段樹和樹狀陣列

線段樹 segment tree 和樹狀陣列是兩種常用的資料結構。他們用來維護乙個區間內的操作,可以在 logn 的複雜度上進行查詢和修改。線段樹可以維護對乙個區間的查詢和修改,可以對區間進行分塊查詢,而樹狀陣列是線段樹的閹割版,經常用來區間查詢,但修改只能進行單點修改,經過改造之後可以區間修改,區...

樹狀陣列和線段樹(未完)

線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。效能 於tsinghua online judge,侵刪 題目描述 魔術師將一疊撲克順次在桌上排成一行,全部正面朝上。之後的每一次揮一揮衣袖,都會翻轉一連串的撲克,改變它們的正反朝向。從古代傳...