BZOJ3223 文藝平衡樹 無旋Treap

2022-03-27 03:10:21 字數 1522 閱讀 8824

time limit: 10 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 31 3

1 31 4

4 3 2 1 5

n,m<=100000

題解:我為什麼先做了維修數列再來做這道題……

本題是我之前一篇博文[您有新的未分配科技點] 無旋treap:從單點到區間(例題 bzoj1500&noi2005 維護數列 )的例題的其中乙個操作內容(翻轉),

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7const

int n=100100;8

intn;

9struct

treap

1014 inline void

update()

15

16 }*null=new treap(),*root=null,*stack[n],*x,*last;

17 typedef paird;

18 inline treap* newtreap(int

val)

1925 inline void pushdown_flip(treap *o)

2635

}36 treap* merge(treap *a,treap *b)

3743

else

44 45}

46 d split(treap *o,int

k)47

52else

53

54return

y;55

}56 inline treap*build()

5764

if(p)stack[p]->ch[1]=x;

65 x->ch[0]=last;stack[++p]=x;66}

67while(p)stack[p--]->update();

68return stack[1

];69

}70 inline void dfs(treap *o)

7178 inline void

reserve()

7986

intmain()

87

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

BZOJ 3223 文藝平衡樹

您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 n,m 100000 splay拿來練翻轉 這題就只用支援翻轉,很裸 翻轉區間 x,y 的操作 提取該區間,打乙個bo...

bzoj3223 文藝平衡樹

bzoj3223 文藝平衡樹 description 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 input 第一行為n,m n表示初始序列有n個數,這個序列依次...

bzoj 3223 文藝平衡樹

題意 對於乙個1 n的序列。進行m次區間反轉操作 求最後反轉過的區間。n,m 100000。題解 splay躶題。寫完維修數列之後感覺這種題都好寫了。反轉啥的打個標記下傳就好,記得輸出時再pushdown標記就好了 這篇題解就是說一下單旋和雙旋的簡單差別 爺爺結點就是目標的情況不討論了 zig za...