洛谷3391 模板 文藝平衡樹 Splay

2021-08-21 06:03:50 字數 632 閱讀 5432

這是一道經典的splay模板題——文藝平衡樹。

模板題!

但是我不會區間操作

其實不難,其它操作不變,給每個點打上標記,翻轉區間就是這棵子樹的每個節點左右兒子翻轉。翻轉區間l—r時把l-1弄到根節點,r+1弄到根節點下,這樣根節點的右兒子的左兒子及它的子樹就是該區間,就把這個點異或1。輸出時或旋轉時下放標記,就是左右子樹交換,左右兒子標記異或1,該節點標記為0。

#include 

using namespace std

;struct nodet[100005];

int n,m,root,cnt;

int build(int l,int r,int f)

void pushdown(int x)

}void rttn(int x)

void lttn(int x)

void splay(int x,int r)

}}int find(int k)

return x;}

int main()

for (int i=1

;i<=n;i++)

printf("%d ",t[find(i+1)].data-1);

}

洛谷 P3391 模板 文藝平衡樹

真正的模板題,先用splay把這個題打熟了再來做這個題qwq splay的基本操作我就不講了,直接說一說這個題的做法 首先我們把序列放到一棵樹上,使得這棵樹的中序遍歷為原序列,這個建樹操作和線段樹類似,遞迴建立左右兒子,然後進行兩個操作 f in dfind find 獲取序列第x xx位置上的值 ...

洛谷 P3391 模板 文藝平衡樹

這是一道經典的splay模板題 文藝平衡樹。您需要寫一種資料結構,來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 輸入格式 第一行為n,m n,m 100000 n表示初始序列有n個數,這個序列依次是 1...

洛谷P3391 模板 文藝平衡樹

您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列。其中需要提供以下操作 翻轉乙個區間,例如原有序序列是 5 4 3 2 1 翻轉區間是 2,4 的話,結果是 5 2 3 4 1 splay 模板。總算是會摳 splay 了。treap 採用鍵值隨機化來維護 bst 平衡,而 splay 則採...