[資料結構]走近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線段樹有兩種做法 一是維護神奇的字首和的字首和 二是沿用遞迴版線段樹的思路,在區間上打標記,然...