*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 ...