splay 文藝平衡樹 資料結構

2022-03-26 00:12:19 字數 1104 閱讀 6614

題目大意:略

splay維護區間翻轉裸題,為了減少不必要的麻煩,多插入兩個點,分別是0和n+1

每次找區間的第k個值,就在splay上二分即可

順便學了一下splay的完美建樹,而且splay有一些小函式可以巨集定義或者用inline,跑得飛快

最後跑一遍中序遍歷即可

1 #include 2 #include 3 #include 4

#define n 100100

5#define il inline

6#define ll long long

7#define root d[0].ch[1]

8#define con(x,ff,p) d[x].fa=ff,d[ff].ch[p]=x

9#define idf(x) d[d[x].fa].ch[0]==x?0:1

10#define lb(x) (x&(-x))

11using

namespace

std;

1213

intn,m,cnt;

14struct

splayd[n<<1

];17 il void pushup(int x)

18 il void pushdown(int

x)19

26 il void rot(int

x)27

35void splay(int x,int

to)36

else51}

52}53int find(int

w)54

64 w-=d[d[x].ch[0

]].sum;

65if(w==1) return

x;66 w--,x=d[x].ch[1

];67}68

return0;

69}70int build(int ff,int l,int

r)71

81void print(int

x)82

88int

main()

89103

print(root);

104return0;

105 }

文藝平衡樹 Splay

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

文藝平衡樹Splay

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

文藝平衡樹(splay模板)

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