鏈結 zkw線段樹

2022-08-13 21:30:15 字數 1584 閱讀 7118

[資料結構]走近zkw線段樹(一)

[資料結構]走近zkw線段樹(二)

線段樹的擴充套件之**zkw線段樹

#include#define lc(x) (x<<1)

#define rc(x) (x<<1|1)

using

namespace

std;

const

int maxn = 100005

;int max(int a, int b)

long

long tr[maxn<<2

];int

m, n;

void maintain(int p)

void

build()

void single_update(int pos, int

v) long

long static_rmq(int l, int

r)

return

ans;

}int

main()

return0;

}

單點更新

#include#define lc(x) (x<<1)

#define rc(x) (x<<1|1)

using

namespace

std;

const

int maxn = 100005, maxm = maxn<<2

;typedef

long

long

ll;int max(int a, int b)

ll tr[maxm];

intm, n;

intl[maxm], r[maxm];

ll down[maxm];

void maintain(int p)

void

build()

for(int i=m-1; i; i--) }//

區間和式pushdown

void pushdown(int

p) }

//從葉節點往回走到根,再自頂向下下推標記

p) void range_update(int l, int r, int

v) down[x] +=v;

tr[x] += (r[x] - l[x] + 1) *v;

}if(r&1

) down[x] +=v;

tr[x] += (r[x] - l[x] + 1) *v;}}

for(sl>>=1; sl; sl>>=1) maintain(sl); //

從最底層被完整包含的區間向上更新維護

for(sr>>=1; sr; sr>>=1

) maintain(sr);

}ll range_query(

int l, int

r)

if(r&1

) }

return

ans;

}int

main()

return0;

}

區間和更新

線段樹和zkw線段樹

好啦,我們就開始說說線段樹吧 線段樹是個支援區間操作和查詢的東東,平時的話還是蠻實用的 下面以最基本的區間加以及查詢區間和為例 線段樹顧名思義就是棵樹嘛,葉子節點是每個基本點,它們所對應的父親就是它們的和,具體如下圖 但是對於這樣的線段樹來說,操作所需的時間是遠達不到我們的要求的 會被t 因為我們會...

zkw線段樹小結

zkw zkwzk w線段樹作為迴圈式線段樹具有較小的常數.其實樹狀陣列本質上就是線段樹 下標為 1,n 1,n 1,n 預處理乙個2 k n2 k n 2k n.然後總空間為2k 12 2k 1 2 k 1 4n 2 4n 2k 1 4n 後面令k 2 kk 2 k k 2k 那麼乙個葉子x xx...

ZKW線段樹之旅 1

膜拜zkw神犇。orz。zkw線段樹的思想是直接找到乙個大區間對應的小區間 由於是自底向上的,所以常數很小 統計的力量 其實我覺得,真正難寫的是區間修改 比如現在造一顆線段樹,支援區間求和,區間修改 zkw線段樹有兩種做法 一是維護神奇的字首和的字首和 二是沿用遞迴版線段樹的思路,在區間上打標記,然...