P3391 模板 文藝平衡樹

2021-10-24 15:28:05 字數 2306 閱讀 4032

題目鏈結

題目描述

您需要寫一種資料結構(可參考題目標題),來維護乙個有序數列。

其中需要提供以下操作:翻轉乙個區間,例如原有序序列是 543

215\ 4\ 3\ 2\ 1

5432

1,翻轉區間是 [2,

4][2,4]

[2,4

] 的話,結果是 523

415\ 2\ 3\ 4\ 1

52341。

輸入格式

第一行兩個正整數 n,m

n,mn,

m,表示序列長度與操作個數。序列中第 i

ii 項初始為 iii。

接下來 m

mm 行,每行兩個正整數 l,r

l,rl,

r,表示翻轉的區間。

輸出格式

輸出一行 n

nn 個正整數,表示原始序列經過 m

mm 次變換後的結果。

輸入輸出樣例

輸入 #1

531

3131

4

輸出 #1

432

15

說明/提示

【資料範圍】

對於 100

%100\%

100%

的資料,1≤n

,m≤100000

1 \le n, m \leq 100000

1≤n,m≤

1000

00,1 ≤l

≤r≤n

1 \le l \le r \le n

1≤l≤r≤

n。按照每個數字在序列中的位置大小建splay,則中序遍歷得到的序列為原序列。平衡樹的各種操作不會改變序列中元素的位置關係,而翻轉相當於把左右子樹維護的序列交換位置。因此翻轉區間 [l,

r][l,r]

[l,r

] 的操作是先將 l−1

l-1l−

1 翻至樹根,再將 r+1

r+1r+

1 翻至 l−1

l-1l−

1 的子節點,此時區間 [l,

r][l,r]

[l,r

] 是節點 r+1

r+1r+

1 的左子樹,交換該子樹中所有節點的左右孩子就可以實現 [l,

r][l,r]

[l,r

] 區間的翻轉。對於每次翻轉可以將要反轉的子樹的根節點打上標籤,後面操作根據需要翻轉。

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

P3391 模板 文藝平衡樹(Splay)

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