哇,只會fhq treap的我瑟瑟發抖,不能旋轉,那怎麼區間翻轉啊。
qaq仔細一想(看了部落格)發現十分簡單,也還是暴力拆,只不過用tag標記,交換子樹就好了還是很簡單的嗎
至於不會fhq treap的同學可以先點這裡或上patrickpwq大佬的部落格
1 #include2 #include3 #include4 #include5 #include6 #include7using
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的左兒子處了。於是,...