靜態仙人掌(圓方樹)
#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 ...