Tyvj 1729 文藝平衡樹

2022-02-27 07:25:00 字數 2410 閱讀 4048

題面如下:

time limit: 1 sec  memory limit: 128 mb

您需要寫一種資料結構(可參考題目標題),來維護乙個有序數列,其中需要提供以下操作:翻轉乙個區間,例如原有序序列是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 3

1 31 3

1 4

4 3 2 1 5
啊,又是一道板子題

題目要求支援的操作只有區間翻轉,其中定位需要維護$size$,翻轉要維護翻轉標記,所以總體來說還是比較好寫的.splay寫這題思路也很明確,每次splay區間左/右端點的左/右邊結點到根/根的右孩子,然後對根的右子結點的左子樹打翻轉標記即可w

直接貼**w

github

1

/*********************************

2judge result:accepted34

********************************

*/5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11

12#define lch chd[0]

13#define rch chd[1]

14#define kch chd[k]

15#define xch chd[k^1]

1617

const

int inf=0x2fffffff;18

19class

splaytree

35 ~node()

41 inline void

maintain()

45 inline void

swap()50}

51 inline void

pushdown()57}

58 inline int

key()

61 inline int

size()

64 }*root;

65 inline void rotate(node* root,int

k)84

void splay(node* root,node* prt=null)

90else95}

96}97 node* build(const std::vector& v,int l,int

r)111

void printtree(node* root,int

deep)

120public

:121

splaytree()

126 splaytree(const std::vector&v)

129 ~splaytree()

132 node* kth(int

pos)

146}

147return

null;

148}

149 inline void reverse(const

int& l,const

int&r)

156 inline void insert(const

int& pos,splaytree*data)

166void

print()

169};

170171

intfastread();

172173

intmain()

184 tree->insert(0,new

splaytree(v));

185for(int i=0;i)

190for(int i=1;i<=n;i++)

193 putchar('\n'

);194

return0;

195}

196197

intfastread()

206while

(isdigit(ch))

210if

(neg)

211 ans=-ans;

212return

ans;

213 }

backup

然後放圖~

tyvj 1729 文藝平衡樹

文藝平衡樹 fromadmin 背景 background 此為平衡樹系列第二道 文藝平衡樹 描述 description 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4...

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黨的時候寫過,現在已經忘了個精光。就當做是模板記錄,以及作為自己終於下定決心怒剛專題的紀念吧。什麼你告訴我你不知道這題怎麼做?那我也沒辦法...