bzoj3223 Tyvj 1729 文藝平衡樹

2022-05-02 05:51:06 字數 1649 閱讀 8701

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

第一行為n,m n表示初始序列有n個數,這個序列依次是(1,2……n-1,n)  m表示翻轉操作次數

接下來m行每行兩個數[l,r] 資料保證 1<=l<=r<=n 

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

5 31 3

1 31 4

4 3 2 1 5

n,m<=100000

正解:splay。

其實我原來就做過,但是這回又調了很久。。find本來是非遞迴的,但是跑不出來,最後沒辦法改成遞迴版才過。。

把l-1旋到根,r+1旋到根的右兒子,然後r+1的左兒子打標記。記得隨時下放。

1

//it is made by wfj_2048~

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include

14#define inf (1<<30)

15#define n (100010)

16#define il inline

17#define rg register

18#define ll long long

19#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)

2021

using

namespace

std;

2223

int ch[n][2

],fa[n],sz[n],key[n],lazy[n],st[n],n,m,rt,tot;

2425 il int

gi()

2930 il void newnode(rg int &x,rg int k,rg int f)

3132 il void pushdown(rg int x)

3334 il void pushup(rg int x)

3536 il void rotate(rg int

x)42

43 il void splay(rg int x,rg int

goal)

52rotate(x);53}

54if (!goal) rt=x; return;55

}5657 il void insert(rg int &x,rg int

k)61

62 il int find(rg int x,rg int

key)

6768 il void print(rg int

x)74

75 il void

work()

85 print(rt); return;86

}8788int

main()

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

bzoj3223 Tyvj 1729 文藝平衡樹

傳送門 description input 第一行為n,m n表示初始序列有n個數,這個序列依次是 1,2 n 1,n m表示翻轉操作次數 接下來m行每行兩個數 l,r 資料保證 1 l r n output 輸出一行n個數字,表示原始序列經過m次變換後的結果 sample input 5 31 3...

BZOJ3223 Tyvj1729 文藝平衡樹

題目大意 一開始有個數列 有q 次區間翻轉操作。請輸出最後的序列。1 n,q 105一道寫出blog都不知道有什麼意義的splay大裸題。splay在我還是pas黨的時候寫過,現在已經忘了個精光。就當做是模板記錄,以及作為自己終於下定決心怒剛專題的紀念吧。什麼你告訴我你不知道這題怎麼做?那我也沒辦法...

bzoj3223 Tyvj1729 文藝平衡樹

time limit 10 secmemory limit 128 mb submit 3014solved 1722 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是54321,翻轉區間是 2,4 的話,結果是52341 第一行為n,m...