splay模板複習

2021-10-22 14:31:10 字數 2947 閱讀 6869

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...