文藝平衡樹(splay模板)

2022-05-09 13:06:06 字數 1049 閱讀 4992

題幹:splay模板,要求維護區間反轉。

splay是一種碼量小於treap,但支援排名,前驅後繼等treap可求的東西,也支援區間反轉的平衡樹。

但是有兩個壞處:

1.splay常數遠遠大於treap以及stl中的set。

2.沒有可持久化splay,但有可持久化treap。

下面是**:

1.pushup以及pushdown

pushup用於維護某點所在子樹大小。

void pushup(int

u)

一行。pushdown用於標記下推。

void pushdown(int

u)}

2.rotate

rotate相當於treap中的lturn和rturn,是將x點轉到他的父節點處。

void rotate(int

x)

注意改變父子關係時的順序問題,還有兩個pushup,應該先pushup兒子後pushup父親。

3.splay(splay核心操作)

splay(a,b),將a旋轉到b的兒子處。

下面是雙旋splay:

void splay(int x,int

goal)

if(goal==0)rot=x;

}

**中while中的if,機房普遍認為是為了維護整棵樹的深度。

4.insert

碼量比treap少很多:

void insert(int

x)

5.查詢排名

**:

int query_kth(int

k)}

6.區間旋轉

先查詢前驅後繼,然後把所在子樹夾到前驅後繼之間,乙個標記解決問題。

void chg(int l,int

r)

最後:推極大極小,推極大極小,推極大極小!!!

全**就不粘了。

模板 文藝平衡樹(Splay)

這是一道經典的splay模板題 文藝平衡樹。輸入格式 第一行為n,m n表示初始序列有n個數,這個序列依次是 1,2,cdots n 1,n 1,2,n 1,n m表示翻轉操作次數 接下來m行每行兩個數 l,r l,r 資料保證 1 leq l leq r leq n1 l r n 輸出格式 輸出一...

文藝平衡樹 Splay

鏈結 splay板子題 結果還調了很久的題,這就是搞文化課的 顯然維護陣列下標,使得splay的中序遍歷始終為當前數列 值得注意 旋轉時始終要記得更新節點 注意更新root節點 每次寫都忘.jpg includeusing namespace std const int maxn 100000 10...

文藝平衡樹Splay

splay是平衡樹 splay 是平衡樹的一種 基本思想是,對於查詢頻率較高的節點,使其處於離根節點相對較近的節點。spaly的基本操作有 struct node tr n 這個旋轉操作跟資料結構裡學的平衡樹旋轉操作是一樣的。如下圖,畫的是右旋 x 的操作,藍色的邊表示資訊發生了改變 void ro...