傳送門 to luogu
題外話:一開始用splay然後就換成了treap\text
splay
寫了一發,結果……
\text
treap
。嗯,無旋treap
\text
treap
。直接用split
\text
split
把[ l,
r]
[l,r]
[l,r
]割下來,然後打標記。當然,因為翻轉之後將不滿足二叉搜尋樹的性質,所以按照個數劃分——按照前x
xx個為一顆樹的原則**。
好像就沒了?畢竟是板題嘛。
#include
#include
#include
#include
#include
#include
using
namespace std;
inline
intreadint()
inline
void
writeint
(int x)
const
int maxn =
100005
;namespace treap
intnewnode
(int x)
void
deletenode
(int id)
void
pushup
(int o)
void
pushdown
(int o)
void
changenode
(int o,
int addv)
intmerge
(int a,
int b)
pair<
int,
int>
split
(unsigned count,
int o)
else
pushup
(o);
return ppl;
}void
init
(int n)
pushup
(k),
pushup
(o);
if(prio[k]
> prio[o]
)break
; v.
pop_back()
;}if(v.
empty()
) root = o;
v.push_back
(o);}}
void
flip
(int l,
int r)
void
print
(int o)
}using
namespace treap;
intmain()
洛谷 P3391 文藝平衡樹
您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 輸入格式 第一行為n,m n表示初始序列有n個數,這個序列依次是 1,2 n 1,n m表示翻轉操作次數 接下來m行每...
洛谷 P3391 文藝平衡樹
by洛谷 裸的平衡樹反轉 方法是按序列位置為關鍵字排序 反轉 l,r 則將l 1置於根處,將r 1作為根的右兒子,這樣,r 1的左子樹就是需要反轉的區間 然後對r 1的左兒子,反轉其左右兒子,並打上線段樹一樣的lazy標記,待以後反轉她的子樹 一開始,企圖把位置維護為關鍵字,然後排序 這樣,若點a為...
洛谷P3391 文藝平衡樹 Splay
時間限制1.00s 記憶體限制125.00mb 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列。其中需要提供以下操作 翻轉乙個區間,例如原有序序列是 54321,翻轉區間是 2,4 的話,結果是 52341。第一行兩個正整數 n,m表示序列長度與操作個數。序列中第 i項初始為 i。接下來 ...