普通平衡樹(Spaly)模版

2021-09-11 01:33:20 字數 1555 閱讀 4952

插入xx數

刪除xx數(若有多個相同的數,因只刪除乙個)

查詢xx數的排名(排名定義為比當前數小的數的個數+1+1。若有多個相同的數,因輸出最小的排名)

查詢排名為xx的數

求xx的前驅(前驅定義為小於xx,且最大的數)

求xx的後繼(後繼定義為大於xx,且最小的數)

操作就不想口胡了,注意要先insert極大值和極小值。因為防止查前驅後繼以及只存有乙個數的時候的時候越界。同時注意查詢第k大時因為k+1,因為insert了乙個極小值。在敲的時候模擬一下就可以理解了

表示

ch[n][2]:ch[x][0]代表 xx 的左兒子,ch[x][1]代表 xx 的右兒子。

val[n]:val[x]代表 xx 儲存的值。

cnt[n]:cnt[x]代表 xx 儲存的重複權值的個數。

par[n]:par[x]代表 xx 的父節點。

size[n]:size[x]代表 xx 子樹下的儲存的權值數(包括重複權值)。

#include

#define inf 1<<30

using

namespace std;

const

int maxn=

2e5+10;

int ch[maxn][2

],par[maxn]

,val[maxn]

,cnt[maxn]

,size[maxn]

;int ncnt,root;

//ncnt新建結點位置,root 表示根節點

int n;

inline

intread()

while

(ch<=

'9'&&ch>=

'0')

return x*f;

}bool

chk(

int x)

void

pushup

(int x)

void

rotate

(int x)

void

splay

(int x,

int goal=0)

rotate

(x);}if

(!goal)root=x;

}void

insert

(int x)

splay

(cur);}

void

find

(int x)

//把某點旋到根節點

intkth

(int k)

}int

pre(

int x)

intsucc

(int x)

void

remove

(int x)

intmain()

return0;

}

替罪羊樹模版 普通平衡樹

替罪羊樹,賊長,我哭了。include include include include include using namespace std const int maxn 1e5 5 const double alpha 0.75 struct nodetzy maxn intcnt,root 新...

普通平衡樹

1.插入數值x。2.刪除數值x 若有多個相同的數,應只刪除乙個 3.查詢數值x的排名 若有多個相同的數,應輸出最小的排名 4.查詢排名為x的數值。5.求數值x的前驅 前驅定義為小於x的最大的數 6.求數值x的後繼 後繼定義為大於x的最小的數 注意 資料保證查詢的結果一定存在。輸入格式 第一行為n,表...

普通平衡樹

題目描述 您需要寫一種資料結構 可參考題目標題 來維護一些數,其中需要提供以下操作 1.插入x數 2.刪除x數 若有多個相同的數,因只刪除乙個 3.查詢x數的排名 若有多個相同的數,因輸出最小的排名 4.查詢排名為x的數 5.求x的前驅 前驅定義為小於x,且最大的數 6.求x的後繼 後繼定義為大於x...