線段樹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...