文藝平衡樹Splay

2022-06-08 20:03:10 字數 899 閱讀 4507

splay是平衡樹

\(splay\) 是平衡樹的一種

基本思想是,對於查詢頻率較高的節點,使其處於離根節點相對較近的節點

spaly的基本操作有

struct node 

}tr[n];

這個旋轉操作跟資料結構裡學的平衡樹旋轉操作是一樣的。

如下圖,畫的是右旋 \(x\) 的操作,藍色的邊表示資訊發生了改變

void rotate(int x)
**中修改資訊的三行對應了三條藍邊,上圖表示的情況是 \(k=0\)

介面splay(int x,int k)把節點 \(u\) 轉到 \(k\) 下面,若 \(k\) 為 \(0\) , 則轉到根的位置

void splay(int x, int k) 

rotate(x);

} if (!k)root = x;

}

if ((tr[y].son[1] == x) ^ (tr[z].son[1] == y))表示的是不是鏈狀,此時轉兩下 \(x\) ,若是鏈狀,則需要先轉一下 \(y\) 再轉 \(x\) ,不能轉兩次 \(x\)

類似線段樹的push_up(),一般只需要維護 \(size\)

void push_up(int u)
在需要 \(lazytag\) 時將標記下

文藝平衡樹 Splay

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

文藝平衡樹(splay模板)

題幹 splay模板,要求維護區間反轉。splay是一種碼量小於treap,但支援排名,前驅後繼等treap可求的東西,也支援區間反轉的平衡樹。但是有兩個壞處 1.splay常數遠遠大於treap以及stl中的set。2.沒有可持久化splay,但有可持久化treap。下面是 1.pushup以及p...

模板 文藝平衡樹(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 輸出格式 輸出一...