splay模板
記得加哨兵!!!
#include
using
namespace std;
//-----pre_def----
const
double pi =
acos(-
1.0)
;const
int inf =
0x3f3f3f3f
;typedef
long
long ll;
typedef
unsigned
long
long ull;
typedef pair<
int,
int> pii;
typedef pair<
double
,double
> pdd;
#define fir(i, a, b) for (int i = (a); i <= (b); i++)
#define rif(i, a, b) for (int i = (a); i >= (b); i--)
#define endl '\n'
#define init_h memset(h, -1, sizeof h), idx = 0;
#define lowbit(x) x &(-x)
//---------------
const
int n =
1e5+10;
struct node
} tr[n]
;int n, m, root, idx;
//功能函式
void
pushup
(int u)
;//由子向父更新
void
rotate
(int x)
;//核心函式1:將所有情況的左旋右旋寫在乙個函式裡面
void
splay
(int x,
int k)
;//核心函式2:將x節點旋轉至k下面,如果k是0則旋轉到根
void
find
(int v)
;//查詢v的位置,並將其旋轉到根節點
void
insert
(int v)
;//插入v
intfind_pre
(int v)
;//查詢v的前驅的節點編號
intfind_ne
(int v)
;//查詢v的後繼的節點編號
void
del(
int v)
;//刪除值為v
intfind_k
(int k)
;//查詢排名為k的數
void
del(
int l,
int r)
;//刪除值在[l~r]的所有點
//over
void
pushup
(int u)
void
rotate
(int x)
//核心函式1:將所有情況的左旋右旋寫在乙個函式裡面
void
splay
(int x,
int k)
//核心函式2:將x節點旋轉至k下面,如果k是0則旋轉到根
else
}rotate
(x);}if
(!k)
//如果k==0,等加於將x旋轉至root
root = x;
}void
find
(int v)
//查詢v的位置,並將其旋轉到根節點(此時左子樹的size就是v的排名)
void
insert
(int v)
//插入乙個數
if(u)
else
splay
(u,0);
}void
del(
int v)
//刪除值為v
else
tr[next]
.s[0]=
0;//這個節點直接丟掉(不存在了)
pushup
(next)
,pushup
(last);}
void
del(
int l,
int r)
//刪除值在[l~r]的所有點
intfind_pre
(int v)
//查詢v的前驅的節點編號
intfind_ne
(int v)
//查詢v的後繼的節點編號
intfind_k
(int k)
//查詢排名為k的數
else
//否則的話在當前節點或者左兒子上查詢
if(tr[y]
.size >= k)
//左兒子的節點數足夠
u = y;
//在左兒子上繼續找
else
//否則就是在當前根節點上
return tr[u]
.v;}
}int
main()
else
if(op ==2)
else
if(op ==3)
else
if(op ==4)
else
if(op ==5)
else
if(op ==6)
else
}#ifndef online_judge
printf
("run_time = %d ms\n"
,clock()
- starttime)
;#endif
return0;
}
splay複習小記
splay的原名是伸展樹,一種超級實用的資料結構,能快速地乾很多資料結構不能幹的事情。很久以前就聽說過並且略微地學了一些,但是當時了解地並不是很多。有些人把splay達成spaly叫做死吧你,b 實質上他是乙個二叉搜尋樹,就是每個節點的左兒子在原序列中是在自己左邊的,右兒子在原序列中是在自己右邊的,...
待補 splay 模板
define crt secure no warnings include include include include include include using namespace std define rep i,t,n for int i t i n i define per i,n,t ...
演算法整理 複習 Splay
一 zig 此時節點 u 是 root v 是左孩子 右旋 v 是右孩子 左旋 二 zig zig v u 同側,先 u 再 v 此時節點 u 不是 root v 與 u 同為左孩子 右旋兩次 v 與 u 同為右孩子 左旋兩次 三 zig zag v u 異側,先 v 再 u 此時節點 u 不是 r...