P3391 模板 文藝平衡樹(Splay)

2021-09-26 21:48:17 字數 1224 閱讀 3727

題目背景

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

題目描述

您需要寫一種資料結構(可參考題目標題),來維護乙個有序數列,其中需要提供以下操作:翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是[2,4]的話,結果是5 2 3 4 1

輸入格式

第一行為n,m n表示初始序列有n個數,這個序列依次是(1,

2,⋯n

−1,n

)(1,2,⋯n−1,n)

(1,2,⋯

n−1,

n),m表示翻轉操作次數

接下來m行每行兩個數[l,

r]

[l,r]

[l,r

]資料保證 1≤l

≤r≤n

1≤l≤r≤n

1≤l≤r≤

n 輸出格式

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

輸入輸出樣例

輸入 #1

5 31 3

1 31 4

輸出 #1

4 3 2 1 5

說明/提示

n ,m

<

=100000

n,m<=100000

n,m<=1

0000

0

#includeusing namespace std;

#define maxn 1000010

#define inf 0x3f3f3f3f

typedef long long ll;

int sz,rt,f[maxn],cnt[maxn],ch[maxn][2],siz[maxn],key[maxn],data[maxn],tag[maxn];

bool get(int x)

void pushup(int x)

void pushdown(int x)

}void rotate(int x)

void splay(int x,int goal)

if(!goal) rt=x;

}int build_tree(int fa,int l,int r)

int rnk(int x)

}}void turn(int l,int r)

void print(int now)

int main()

print(rt);

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