整理的演算法模板合集:acm模板
// head儲存煉表頭,e儲存節點的值,ne儲存節點的next指標,idx表示當前用到了哪個節點
int head, e[n]
, ne[n]
, idx;
// 初始化
void
init()
// 在煉表頭插入乙個數a
void
insert
(int a)
// 將頭結點刪除,需要保證頭結點存在
void
remove()
// e表示節點的值,l表示節點的左指標,r表示節點的右指標,idx表示當前用到了哪個節點
int e[n]
, l[n]
, r[n]
, idx;
// 初始化
void
init()
// 在節點a的右邊插入乙個數x
void
insert
(int a,
int x)
// 刪除節點a
void
remove
(int a)
// tt表示棧頂
int stk[n]
, tt =0;
// 向棧頂插入乙個數
stk[
++ tt]
= x;
// 從棧頂彈出乙個數
tt --
;// 棧頂的值
stk[tt]
;// 判斷棧是否為空
if(tt >0)
// hh 表示隊頭,tt表示隊尾的後乙個位置
int q[n]
, hh =
0, tt =0;
// 向隊尾插入乙個數
q[tt ++
]= x;
if(tt == n) tt =0;
// 從隊頭彈出乙個數
hh ++;if
(hh == n) hh =0;
// 隊頭的值
q[hh]
;// 判斷佇列是否為空
if(hh != tt)
/*常見模型:找出每個數左邊離它最近的比它大/小的數*/
int tt =0;
for(
int i =
1; i <= n; i ++
)
/*常見模型:找出滑動視窗中的最大值/最小值*/
int hh =
0, tt =-1
;for
(int i =
0; i < n; i ++
)
// h[n]儲存堆中的值, h[1]是堆頂,x的左兒子是2x, 右兒子是2x + 1
// ph[k]儲存第k個插入的點在堆中的位置
// hp[k]儲存堆中下標是k的點是第幾個插入的
int h[n]
, ph[n]
, hp[n]
, size;
// 交換兩個點,及其對映關係
void
heap_swap
(int a,
int b)
void
down
(int u)
}voidup(
int u)
}// o(n)建堆
for(
int i = n /
2; i; i --
)down
(i);
(1) 拉鍊法
int h[n]
, e[n]
, ne[n]
, idx;
// 向雜湊表中插入乙個數
void
insert
(int x)
// 在雜湊表中查詢某個數是否存在
bool
find
(int x)
(2) 開放定址法
int h[n]
;// 如果x在雜湊表中,返回x的下標;如果x不在雜湊表中,返回x應該插入的位置
intfind
(int x)
return t;
}
以上模板來自yxc 資料結構(二)模板
一 學後感 模板節省了空間,以前乙個函式只能用乙個資料型別來實現,但是現在應用模板後,可以用乙個函式實現多種資料在函式中的應用,節省了時間和空間。把好幾種資料型別合二為一,可以在主函式中使用合適的資料型別,非常方便 模板是對具有相同特性的函式或類的再抽象,模板是一種引數化的多型 是一種 共享機制。用...
模板 資料結構 Treap
還有人把treap叫做樹堆的,但是常用名還是叫做treap的比較多。不進行任何封裝的,帶求和操作的,乙個節點存放多個元素的最普通的treap。includeusing namespace std typedef long long ll define ls ch id 0 define rs ch ...
資料結構 演算法模板
public double quickmul double x,long n return res const int max n 1e5 5 int par max n 2 int rank max n 2 void init int n int find int x else void unit...