BZOJ3065 替罪羊樹套線段樹

2022-04-30 05:15:08 字數 1293 閱讀 1021

以前看到這題都瑟瑟發抖,終於過了心情舒暢。

按下標為關鍵字建替罪羊樹,每個結點開乙個權值線段樹,維護的這個結點代表的子樹的資訊。

這題還得垃圾**,自己yy的,不知對不對..

#include #include 

using

namespace

std;

#define m ((l+r)>>1)

#define l(x) t[x].s[0]

#define r(x) t[x].s[1]

#define l(x) t2[x].s[0]

#define r(x) t2[x].s[1]

const

int n=70005

;char op[2

];int n,x,y,z,q,rt,tt,t1,la,tp,tp2,v,st[n],st2[n],rb[n*30],rb2[n*256

];struct nd t[n*30],t2[n*256

];void dl(int x)

void upd(int &o,int l,int r,int x,int

y) void ge(int x)

void mr(int l,int r,int &x)

void bd(int &x,int l,int

r) void rm()

void ins(int &x,int p,int

v)

if(t[l(x)].sz+1>=p) ins(l(x),p,v); else ins(r(x),p-t[l(x)].sz-1

,v);

if(t[x].sz*0.75

0,ge(x),bd(x,1

,tp),rm();

}void gt(int x,int l,int

r)

if(l<=t[l(x)].sz) gt(l(x),l,min(r,t[l(x)].sz));

if(l<=t[l(x)].sz+1&&r>=t[l(x)].sz+1) st2[++tp2]=t[x].v;

if(r>t[l(x)].sz+1) gt(r(x),max(l-t[l(x)].sz-1,1),r-t[l(x)].sz-1);}

int dfs(int l,int r,int

k)

else

}int qr(int l,int r,int k)

void gai(int x,int p,int

v) int

main()

return0;

}

3065 帶插入區間K小值 樹套樹 替罪羊樹

經過週六一天,周一3個小時的晚自習,周二2個小時的瘋狂debug,終於憑藉自己切掉了這道樹套樹題.code include include include include include include 帶插入區間 k 小值 外層 替罪羊 內層 權值線段樹 using namespace std d...

替罪羊樹SCT

照著指標版的打了個陣列版的,發現自己上了一節c 語法課。重構什麼的,最難在於找出深度最小的需要重構的節點,畢竟多寫乙個函式不太優雅,陣列又不像指標那麼方便直接修改。如果你要傳回乙個變數的位址 因為你直接修改這個位址ch等等就直接跟著改了,十分方便 函式不能寫 int 得寫int 刪除還是不要重構,太...

平衡樹 替罪羊樹

yangkai 身為平衡樹卻不做任何形式的旋轉,替罪羊樹可以稱得上是最暴力的平衡樹了。替罪羊樹 sgt 保留有二叉搜尋樹的基本性質,即對於任意乙個節點t,左兒子的所有節點比它小,右兒子的所有節點比它大。但是既然不基於翻轉,它怎樣維護平衡樹的優秀複雜度呢?sdt基於乙個叫做 重構 的操作,聽起來很是優...