#include#include#include
#include
#include
#define maxn 1000001
using
namespace
std;
int f[maxn],ch[maxn][2
],num[maxn],cnt[maxn],size[maxn];
inttree_size,root,n,p,t,x;
inline
void clear(int
x)//
將這個節點全部清空,清空即將所有資訊初始化為0
inline
intget(int
x)//
每次判斷是在左兒子還是右兒子,並且巧妙地運用了。。。(ch[f[x]][1]==x返回值是1,那麼就是右兒子!!!)
inline
void update(int x)
}inline
void rotate(int
x)inline
void splay(int
x)inline
void insert(int
x)
//還未開始建子樹的判斷
int now=root,father=0
;
while (1
)
//如果沒有重複。。。
father=now;
now=ch[now][num[now]//
如果沒能找到其位置,就繼續根據其權值的大小下放該數
if (now==0)
}}inline
int findx(int x)
}}inline
int find(int x)
ans+=cnt[now];
now=ch[now][1];//
向右擴充套件
} }
}inline
int pre()
inline
int next()
inline
void del(int
x)//
如果有重複直接一步更新
if (!ch[root][0] && !ch[root][1]) //
如果孤苦伶仃,就直接刪除。。。
if (!ch[root][0
])
else
if (!ch[root][1
])
//將左邊的最大移至根節點
int lef=pre(),y=root;
splay(lef);
ch[root][
1]=ch[y][1
]; f[ch[y][
1]]=root;
clear(y);
update(root);
}int
main()
}}}
蒟蒻的線段樹
struct node ll a maxn node tr maxn 2 至於為什麼陣列要開4倍 能用就行 以及區間查詢 ll query int x,int l,int r interval sum if tr x tag 0 下推lazy tag 區間更新時使用 int mid tr x l t...
蒟蒻萌新的c 深搜指南
適合萌新的c 深搜指南 好吧好吧,我是蒟蒻,但教程肯定是原創的啦,比較符合蒟蒻的水平,就是為了方便自己以後複習啦,dalao不要吐槽,多多指教 先來深搜吧,好不容易學完了,深搜全稱 深度優先搜尋 很高大上的名字有木有!簡單來說就是 不撞南牆心不死 我來畫張圖理解一下哈 深搜廣搜我一般都借助圖來理解啦...
bzoj4636 蒟蒻的數列 線段樹
蒟蒻的數列 bzoj 4636 題目大意 給定乙個序列,初始均為0。n次操作 每次講一段區間中小於k的數都變成k。操作的最後詢問全域性和。注釋 1 le n le 4 cdot 10 4 想法 那個操作就是乙個不好好說話的操作,說白了就是對區間的每乙個數取max 然後我們對於那個序列建立分治線段樹。...