文藝平衡樹(區間翻轉)

2022-07-22 06:42:16 字數 961 閱讀 9197

哇,只會fhq treap的我瑟瑟發抖,不能旋轉,那怎麼區間翻轉啊。

qaq仔細一想(看了部落格)發現十分簡單,也還是暴力拆,只不過用tag標記,交換子樹就好了還是很簡單的嗎

至於不會fhq treap的同學可以先點這裡或上patrickpwq大佬的部落格

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int maxn=100010;9

int n,m,val[maxn],rnd[maxn],son[maxn][3

],size[maxn],sum_p;

10int tag[maxn],root=0

;11 inline void read(int &x)

1222

while(ch>='

0'&&ch<='9'

)2327 x*=f;28}

29 inline void update(int

x)3038}

39 inline int newnode(int

x)40

46int merge(int x,int

y)47

56else

5762

}63 inline void split(int &x,int &y,int k,int

pos)

6475

else

7680

update(pos);81}

82}83void rev(int l,int

r)84

91void print(int

x)92

99int

main()

100110

print(root);

111 }

bzoj3223 文藝平衡樹(平衡樹區間翻轉)

time limit 10 sec memory limit 128 mb submit 6177 solved 3679 submit status discuss 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻...

BZOJ 3223 文藝平衡樹 區間翻轉

time limit 10 sec memory limit 128 mb submit 4861 solved 2851 submit status discuss 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻...

BZOJ 3223 文藝平衡樹(區間翻轉)

給定n個數,對這個數列進行m次操作,每次將乙個選定區間 l,r 翻轉。求出m次操作後得到的數列。splay 這應該算是splay的經典應用了吧。翻轉本身不算難事 對於乙個帶翻轉的區間 l,r 先將l 1旋轉至樹根,再將r 1旋轉至根的有節點。這樣一來,l,r 的節點全部都在r 1的左兒子處了。於是,...