P3391 模板 文藝平衡樹(Splay)

2022-05-09 18:53:21 字數 1203 閱讀 6428

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

n, m \leq 100000n,m≤100000

splay的模板題。

splay在解決區間問題的時候是先把l旋轉到根節點,再把r旋轉到根節點的右孩子,

然後給根節點的右孩子的左孩子打上標記。

遞迴修改即可

#include#include#include#include#includeusing namespace std;

const int maxn=100001;

inline void read(int &n)

while(c>='0'&&c<='9')

n=flag==1?-x:x;

}struct node

tree[maxn];

int root=0;

int n,m;

inline void update(int x)

inline void connect(int x,int f,bool how)

inline void pushdown(int x)

int build(int l,int r)

inline bool get(int x)

inline int find(int x)

return now;

}inline void rotate(int x)

inline void splay(int x,int r)

rotate( (get(x)==get(f))?f:x ); rotate(x);

} update(x);

}inline void out(int x)

int main()

out(root);

return 0;

}

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 ...