4 資料結構

2021-09-28 22:13:03 字數 3310 閱讀 3568

*4.2 線段樹*

4.1 樹狀陣列

4.1.1 普通樹狀陣列

僅支援單點修改區間查詢。

const

int maxn =

1e5+10;

int tree[maxn]

;intlb(

int x)

intread

(int x)

return tot;

}void

add(

int num,

int x)

}

4.1.2 普通二維樹狀陣列

const

int maxn =

1010

;int tree[maxn]

[maxn]

;int n, m;

intlb

(int x)

intread

(int x,

int y)

return tot;

}void

add(

int num,

int x,

int y)

}}

4.1.3 樹狀陣列維護區間最大、最小值

維護區間[1,x]的:

const

int maxn =

1e5+10;

int c[maxn]

, n, r[maxn]

, a[maxn]

;inline

intlb

(int x)

intquery

(int x)

void

update

(int x,

int v)

}

4.2 線段樹

4.2.1 維護區間最值,區間修改

const

int maxn =

1e5+10;

struct tree c[maxn <<2]

; ll a[maxn]

;void

build

(int id,

int l,

int r)

int mid =

(l + r)

>>1;

build

(id <<

1, l, mid)

;build

(id <<1|

1, mid +

1, r)

; c[id]

.maxm =

max(c[id <<1]

.maxm, c[id <<1|

1].maxm)

; c[id]

.minm =

min(c[id <<1]

.minm, c[id <<1|

1].minm)

; c[id]

.sum = c[id <<1]

.sum + c[id <<1|

1].sum;

}void

pushdown

(int id)

void

update

(int id,

int pos, ll v)}

ll query_max

(int id,

int l,

int r)

ll query_min

(int id,

int l,

int r)

void

update

(int id,

int l,

int r, ll v)

if(c[id]

.add)

pushdown

(id)

;update

(id <<

1, l, r, v)

;update

(id <<1|

1, l, r, v)

; c[id]

.sum = c[id <<1]

.sum + c[id <<1|

1].sum;}

ll query_sum

(int id,

int l,

int r)

if(c[id]

.add)

pushdown

(id)

; ll ans =

query_sum

(id <<

1, l, r)

+query_sum

(id <<1|

1, l, r)

; c[id]

.sum = c[id <<1]

.sum + c[id <<1|

1].sum;

return ans;

}

4.2.2 動態開點線段樹

const

int maxn =

(1e6+10

)*51;

const

int inf =

1e9+10;

int ls[maxn]

, rs[maxn]

, cnt;

struct tree c[maxn]

;void

build

(int id,

int l,

int r)

void

update

(int id,

int pos,

int v)

update

(ls[id]

, pos, v)

; c[id]

.mmin =

min(c[id]

.mmin, c[ls[id]

].mmin);}

else

update

(rs[id]

, pos, v)

; c[id]

.mmin =

min(c[id]

.mmin, c[rs[id]

].mmin);}

}}bool

query_min

(int id,

int l,

int r,

int ck)

else

if(l > mid)

else

return0;

}

資料結構(4)

1 允許進行插入 刪除操作的一端叫棧頂 2 表的另一端叫棧底 3 當棧中沒有資料元素時稱為空棧 4 插入叫進棧或入棧 5 刪除叫退棧或出棧 特點 後進先出 順序棧typedef struct sqstack 初始化棧 void initstack sqstack s s為棧指標,top為s所指棧的棧...

資料結構4

實現getelem的具體操作,即將線性表l中的第i個位置的元素值返回。我們只需把陣列第i 1下標的值返回即可 define ok 1 define error 0 define true 1 define false 0 typedef int status status 是函式的型別,其值是函式結...

資料結構筆記(4)

棧與佇列 一 棧1.順序棧的實現 template class seqstack seqstack void push datatype x datatype pop datatype gettop int empty private datatype data stacksize int top ...