資料結構模板合集

2022-05-05 21:03:10 字數 2602 閱讀 2221

線段樹lazy操作模板(區間修改,區間查詢)

class segment_tree_lazy

inline void add(int p,int v,int t)

inline void pushdown(int p,int l,int r)

public:

inline void build_tree(int p,int l,int r)

build_tree(ls,l,mid);

build_tree(rs,mid+1,r);

updata(p);

}inline void change(int p,int l,int r,int x,int y,int t)

pushdown(p,l,r);

if(x<=mid)

change(ls,l,mid,x,y,t);

if(y>mid)

change(rs,mid+1,r,x,y,t);

updata(p);

}inline int ask(int p,int l,int r,int x,int y)

}s;

二維線段樹模板(單點修改,區間查詢)
class segment_tree_xy

public:

inline void change_y(int py,int l,int r,int y,int t,int px)

if(y<=mid)

change_y(ls(py),l,mid,y,t,px);

if(y>mid)

change_y(rs(py),mid+1,r,y,t,px);

updata(px,py);

} inline void change_x(int px,int l,int r,int x,int y,int t)

if(x<=mid)

change_x(ls(px),l,mid,x,y,t);

if(x>mid)

change_x(rs(px),mid+1,r,x,y,t);

change_y(1,1,n,y,t,px);

} inline int ask_y(int py,int l,int r,int y1,int y2,int px)

inline int ask_x(int px,int l,int r,int x1,int y1,int x2,int y2)

}s;

線段樹標記永久化模板(標記不下傳,主要用於李超線段樹與主席樹等)
class tag_forever_segment_tree

inline void build_tree(int p,int l,int r)

build_tree(ls,l,mid);

build_tree(rs,mid+1,r);

updata(p);

} inline void change(int p,int l,int r,int x,int y,int t)

if(y<=mid)

change(ls,l,mid,x,y,t);

if(x>mid)

change(rs,mid+1,r,x,y,t);

if(y>mid&&x<=mid)

} inline int ask(int p,int l,int r,int x,int y,int sum)

}}t;

線段樹合併模板
class mergable_segment

public:

inline void change(int &p,int l,int r,int x)

if(x<=mid)

change(ls[p],l,mid,x);

else

change(rs[p],mid+1,r,x);

updata(p);

} inline int query(int p,int l,int r,int x)

inline int merge(int a,int b)

}m;

主席樹模板(可持久化線段樹,可訪問歷史版本,詳見 **可持久化線段樹(主席樹))
class persistable_segment_tree

inline void build_tree(int &pos,int l,int r)

build_tree(ls[pos],l,mid);

build_tree(rs[pos],mid+1,r);

} inline void change(int &pos,int vsn,int l,int r,int loc,int val)

ls[pos]=ls[vsn];//繼承舊版本左子樹

rs[pos]=rs[vsn];//繼承舊版右左子樹

if(loc<=mid)//如果要修改的節點在左子樹中

change(ls[pos],ls[vsn],l,mid,loc,val);//處理左子樹

else

change(rs[pos],rs[vsn],mid+1,r,loc,val);//處理右子樹

} inline int ask(int vsn,int l,int r,int loc)

}p;

資料結構模板 棧

此部落格是存的是我自己編寫的棧模板,如有錯誤請指出棧是操作受限的線性表,只允許在棧頂進行插入和刪除操作,遵循 後進先出 原則。include include define elemtype int define maxsize 1000 using namespace std 這是順序棧的模板 ty...

資料結構模板 佇列

此部落格是存的是我自己編寫的佇列模板,如有錯誤請指出佇列是操作受限的線性表,只允許在隊頭進行刪除操作,在隊尾進行插入操作,遵循 先進先出 原則。順序隊 存在假溢位問題 include include define elemtype int define maxsize 1000 using name...

基本資料結構模板

單鏈表 head儲存煉表頭,e儲存節點的值,ne儲存節點的next指標,idx表示當前用到了哪個節點 int head,e n ne n idx 初始化 void init 在煉表頭插入乙個數a void insert int a 將頭結點刪除,需要保證頭結點存在 void remove 雙鏈表 e...