簡易平衡樹

2022-05-11 04:24:17 字數 1596 閱讀 8364

vector的下標和陣列一樣從0開始的

\(vectorvec\)

\(vec.size();\) //返回向量的實際大小

$vec.begin(); $//返回向量的開始指標的位置

\(vec.end();\) //返回向量的結束指標的下乙個位置

\(vec.push\_back(x);\) //在物件末尾插入資料x

\(vec.pop\_back();\) //在物件末尾刪除資料

\(vec.clear();\) //清除物件中的所有資料

\(vec.at(i);\) //訪問容器中第i個數的值或\(vec[i]\)

在第\(i+1\)個數前面插入乙個數\(x:vec.insert(vec.begin()+i,x)\)

刪除第\(i+1\)個數\(:vec.erase(vec.begin()+i)\)

#includelower_bound(); upper_bound(); unique();//判重

lower_bound(a + 1,a + n + 1,x);//在begin到end-1二分查詢有序表中第乙個大於等於x的數的位置

//僅適用於非降序的有序表,如果是非公升序的有序表,則需要過載:

lower_bound(a+1,a+n+1,x,greater());

int t=lower_bound(a+1,a+n+1,x)-a;//在begin到end-1查詢第乙個大於等於x的數的位置,返回值是位址 if(a[t]==x) //如果這個數==x

printf("%d\n",t);

upper_bound(a+1,a+n+1,x)-a;//二分查詢有序表中第乙個大於x的數的位置,僅適用於非降序的有序表

int k=unique(a+1,a+n+1)-a;//得到有效長度,去重

for(int i=1;i<=k;i++) //只輸出有效長度

printf("%d ",a[i]);

p3369普通平衡樹

操作:插入\(x\),刪除\(x\),查詢\(x\)排名\((\)比當前小的數\(+1)\),查詢排名\(x\)數,\(x\)前驅\((小於x且最大)\),\(x\)後繼\((大於x,且最小)\)

#include#include#includeusing namespace std;

vectorv;

int n,opt,x;

int main()

return 0;

}

\(p1801\)

有一整數陣列,初始為空,一特殊變數,初始為\(0\)。\(add(x)\),把\(x\)加入陣列。\(get(x):在x次add後,++i\),輸出陣列中第\(i\)小的數

m=read(),n=read();

for(int i=1;i<=m;i++)a[i]=read();

for(int i=1;i<=n;i++)

else q.push(-a[cnt]);//直接加入小根堆。

}printf("%lld\n",-q.top());

p.push(-q.top());

q.pop();

}

動態平衡二叉搜尋樹的簡易實現,Treap 樹

treap 樹是一種易於實現的近似平衡的二叉搜尋樹。treap 每個結點包括值和優先順序兩個屬性,值滿足二叉搜尋樹性質 左 中 右 優先順序滿足大頂堆的性質 左 中 右 中 treap 樹的插入和刪除的實現比較簡單,插入結點時為待插結點隨機生產乙個優先順序值,按照bst的插入演算法並通過左旋或右旋調...

Tyvj P1728 普通平衡樹 平衡樹

題目鏈結 p1728普通平衡樹 此為平衡樹系列第一道 普通平衡樹 1.插入x數 2.刪除x數 若有多個相同的數,因只刪除乙個 3.查詢x數的排名 若有多個相同的數,因輸出最小的排名 4.查詢排名為x的數 5.求x的前驅 前驅定義為小於x,且最大的數 6.求x的後繼 後繼定義為大於x,且最小的數 第一...

平衡查詢樹

在前面我們說了二叉查詢樹,它在最壞的情況下是很糟糕的。下面我們來說一種查詢樹,這種這查詢樹能夠保證無論如何構造它,它的執行時間都是對數級別的。理想情況下我們希望能夠保持二分查詢樹的平衡性。在一棵含有n個結點的樹中,我們希望樹的高度為lgn,這樣我們就能保證所有查詢能在lgn次比較內結束,就和二分查詢...