P3391 模板 文藝平衡樹FHQ treap

2022-04-06 17:37:56 字數 1915 閱讀 5827

這是一道經典的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

輸出格式:

輸出一行n個數字,表示原始序列經過m次變換後的結果

輸入樣例#1: 複製

5 3

1 31 3

1 4

輸出樣例#1: 複製

4 3 2 1 5

1 #include2 #include3

4using

namespace

std;56

const

int n = 500100;7

int ch[n][2

],tag[n],val[n],siz[n],key[n];

8int

tn,root,n,m;

910 inline char

nc()

14 inline int

read()

22 inline void pushup(int

x) 25 inline void pushdown(int

x) 31

}32 inline int makenode(int

x) 35

int merge(int x,int

y) 42

else46}

47void split(int now,int k,int &x,int &y) 57}

58 inline void rever(int l,int

r) 65

void print(int

x) 72

intmain()

77while (m--)

81print(root);

82return0;

83 }

網上學的另一種建樹方法:

1

int build(int l,intr)2

11 root = build(1,n);

雖然可能不滿足堆的性質,但是,堆在這個過程中只是調節樹的平衡的,所以還是可以過的

板子的發展史。。。

1 #include2 #include3

4using

namespace

std;56

const

int n = 500100;7

int ch[n][2

],tag[n],val[n],siz[n],key[n];

8int

tn,root,n,m;

910 inline char

nc()

14 inline int

read()

22 inline void pushup(int

x) 25 inline void pushdown(int

x) 31

}32 inline int makenode(int

x) 35

int merge(int x,int

y) 42

else47}

48void split(int now,int k,int &x,int &y) 58}

59 inline void rever(int l,int

r) 66

void print(int

x) 73

intmain()

78while (m--)

82print(root);

83return0;

84 }

view code

P3391 模板 文藝平衡樹

題目鏈結 題目描述 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列。其中需要提供以下操作 翻轉乙個區間,例如原有序序列是 543 215 4 3 2 1 5432 1,翻轉區間是 2,4 2,4 2,4 的話,結果是 523 415 2 3 4 1 52341。輸入格式 第一行兩個正整數 ...

P3391 模板 文藝平衡樹(Splay)

題目背景 這是一道經典的splay模板題 文藝平衡樹。題目描述 輸入輸出格式 輸入格式 第一行為n,m n表示初始序列有n個數,這個序列依次是 1,2,n 1,n m表示翻轉操作次數 接下來m行每行兩個數 l,r 資料保證 1 l r n 輸出格式 輸出一行n個數字,表示原始序列經過m次變換後的結果...

P3391 模板 文藝平衡樹(Splay)

基於這道題的關於splay的講解 將由這篇部落格開始。include include include include include include include include include include include include define lowbit x x x define ...