ACM 各種模板整理

2021-09-25 05:10:13 字數 3604 閱讀 2912

靜態仙人掌(圓方樹)

#includeusing namespace std;

#define ll long long

#define pr std::pair#define mk(a,b) std::make_pair(a,b)

const int maxm=2e5+5;

const int maxn=1e5+5;

struct edgee[maxm*4];

int etot=0;

int node[maxn*2];

void add(int x,int y,ll v)

vectorg;

ll sum_val[maxn*2];

int tot=0,col=0,dfn[maxn],low[maxn],stk[maxn],top=0;

int n,m,max_e;

void tarjan(int x,int fa=0)

}pr lca(int x,int y)

ll abs(ll v)

ll solve(int x,int y)

while(q--)

return 0;

}

非旋treap(未封裝)

#includeusing namespace std;

#define ll long long

#define pr std::pair#define mk(a,b) std::make_pair(a,b)

const int maxn=1e5+5;

struct nodet[maxn];

#define ls t[x].son[0]

#define rs t[x].son[1]

void updata(int x)

void color(int x)

void push_col(int x)

}int merge(int x,int y)else

} pr split_rk(int x,int kth)else

}int tot=0;

int build(int l,int r,int *a)

int root=0;

void reverse(int l,int r)

void dfs(int x)

int n,m,a[maxn];

int main()

dfs(root);

}

tarjan

namespace trje[maxm*4];

int etot=0;

edge *node[maxn*2];

int nv[maxn*2];

void add(int x,int y,int val)

void clear()

bool use[maxn];

int dfn[maxn],low[maxn],col[maxn],stk[maxn],top,tot,colnum;

void dfs(int x,int fa)else if(use[i->to])low[x]=std::min(low[x],dfn[i->to]);

}else fa=0;

if(dfn[x]==low[x])

top--;

} }void tarjan(int n)

}}

線段樹(區間求和區間加為例)

templateclass segment_tree

void clear(tpc &x)

void color(int l,int r,int rt,tpc colv)

void pushcol(int l,int r,int rt)

clear(col[rt]); //下放後清除標記 }

public:

segment_tree(int n)

~segment_tree()

void build(int l,int r,int rt,tp *orv)

int mid=(l+r)>>1;

build(lson,orv);

build(rson,orv);

updata(l,r,rt);

} void modify(int l,int r,int rt,int tl,int tr,tpc colv)

pushcol(l,r,rt);

int mid=(l+r)>>1;

if(tl<=mid)modify(lson,tl,tr,colv);

if(tr>mid)modify(rson,tl,tr,colv);

updata(l,r,rt);

} tp query(int l,int r,int rt,int tl,int tr)

#undef lson

#undef rson

};

樹狀陣列優化版(區間操作和修改)

templateclass bit_pro

tp get(tp *val,int pos)

tp sum(int pos)

public:

bit_pro(int n)

~bit_pro()

tp query(int l,int r)

void modify(int l,int r,tp v)

#undef lowbit

};

樹狀陣列普通版

templateclass bit

~bit()

void add(int pos,tp v)

tp get(int pos)

#undef lowbit

};

st表

templateclass st

}; public:

node *root=new node;

inline int cal(tp s)

void insert(node *x,tp s)

int v=cal(s);

if(!x->son[v])x->son[v]=new node;

insert(x->son[v],s+1);

} void query(node *x,tp s)

#undef maxn_c

};

manacher

templateclass manacher

s[tot]=0;

} int work()

} int ans=0;

for(int i=0;ifft

#define tpv double

class cpx

cpx operator *(const cpx &p)const

cpx operator +(const cpx &p)const

cpx operator -(const cpx &p)const

cpx operator /(const tpv &p)const

};#undef tpv

templateclass fft

ACM 各種排序

簡單選擇排序 void select sort sqlist l 把無序區最小的挑出來 if i j 直接插入排序 void zhijie sqlist l l r j dk l r 0 插入到正確位置 r move void shellsort sqlist l,int dlta,int t 快速...

acm模板總結

模板鏈結 kmp exkmp trie 可持久化trie樹 dfs 序 01trie manacher 字串雜湊 2019上海網路賽 g題 17 sa 字尾陣列 最大不重疊相似子串 求兩個字串長度不小於 k 的公共子串的個數 sam 字尾自動機 洛谷p3975 求字典序第k小串 動態求出現至少k次本...

ACM自用模板

include include include include include include include include include include include include includeusing namespace std define ll long long define ...