以前看到這題都瑟瑟發抖,終於過了心情舒暢。
按下標為關鍵字建替罪羊樹,每個結點開乙個權值線段樹,維護的這個結點代表的子樹的資訊。
這題還得垃圾**,自己yy的,不知對不對..
#include #includeusing
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基於乙個叫做 重構 的操作,聽起來很是優...