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次比較內結束,就和二分查詢...